Προγραμματισμός

Τρόπος χρήσης της κατηγορίας Buffer στο C #

Ένα buffer είναι μια ακολουθία byte στη μνήμη και το buffering είναι ο χειρισμός των δεδομένων που βρίσκονται στη μνήμη. Στο .NET buffering αναφέρεται στο χειρισμό της μη διαχειριζόμενης μνήμης, η οποία αντιπροσωπεύεται ως μια σειρά byte.

Ίσως θελήσετε να επωφεληθείτε από την κλάση System.Buffer στο .NET όποτε θέλετε να εγγράψετε δεδομένα στη μνήμη απευθείας ή όποτε θέλετε να χειριστείτε δεδομένα που είναι αποθηκευμένα σε μη διαχειριζόμενη μνήμη. Αυτό το άρθρο μιλά για το πώς μπορούμε να συνεργαστούμε με την κατηγορία Buffer στο C #.

Για να εργαστείτε με τα παραδείγματα κώδικα που παρέχονται σε αυτό το άρθρο, θα πρέπει να έχετε εγκαταστήσει το Visual Studio 2019 στο σύστημά σας. Εάν δεν έχετε ήδη αντίγραφο, μπορείτε να κατεβάσετε το Visual Studio 2019 εδώ.

Δημιουργήστε ένα έργο εφαρμογής .NET Core κονσόλας στο Visual Studio

Πρώτα απ 'όλα, ας δημιουργήσουμε ένα έργο εφαρμογής .NET Core κονσόλας στο Visual Studio. Υποθέτοντας ότι το Visual Studio 2019 είναι εγκατεστημένο στο σύστημά σας, ακολουθήστε τα βήματα που περιγράφονται παρακάτω για να δημιουργήσετε ένα νέο έργο εφαρμογής .NET Core κονσόλας στο Visual Studio.

  1. Εκκινήστε το Visual Studio IDE.
  2. Κάντε κλικ στο "Δημιουργία νέου έργου".
  3. Στο παράθυρο "Δημιουργία νέου έργου", επιλέξτε "Εφαρμογή κονσόλας (.NET Core)" από τη λίστα των προτύπων που εμφανίζονται.
  4. Κάντε κλικ στο Επόμενο.
  5. Στο παράθυρο "Διαμόρφωση του νέου έργου" που εμφανίζεται στη συνέχεια, καθορίστε το όνομα και την τοποθεσία για το νέο έργο.
  6. Κάντε κλικ στο Δημιουργία.

Αυτό θα δημιουργήσει ένα νέο έργο εφαρμογής .NET Core κονσόλας στο Visual Studio 2019. Θα χρησιμοποιήσουμε αυτό το έργο στις επόμενες ενότητες αυτού του άρθρου.

Μέθοδοι της κατηγορίας Buffer στο .NET

Η κατηγορία Buffer περιέχει τις ακόλουθες μεθόδους:

  • Το BlockCopy (Array, Int32, Array, Int32) χρησιμοποιείται για την αντιγραφή ενός πίνακα προέλευσης από μια καθορισμένη μετατόπιση σε έναν πίνακα στόχου σε μια καθορισμένη μετατόπιση.
  • ByteLength (Array) επιστρέφει τον συνολικό αριθμό byte σε έναν πίνακα, δηλαδή το μήκος του πίνακα.
  • Το GetByte (Array, Int32) χρησιμοποιείται για την ανάκτηση ενός byte σε μια καθορισμένη θέση σε έναν πίνακα.
  • Το SetByte (Array, Int32, Byte) χρησιμοποιείται για τον ορισμό ενός byte σε μια δεδομένη θέση του πίνακα.
  • Το MemoryCopy (Void *, Void *, Int64, Int64) και το MemoryCopy (Void *, Void *, UInt64, UInt64) χρησιμοποιούνται για την αντιγραφή ενός αριθμού byte από μια διεύθυνση προέλευσης στη μνήμη σε μια άλλη διεύθυνση.

Χρήση συστοιχιών και buffer στο C #

Πριν ξεκινήσουμε να δουλεύουμε με την κατηγορία Buffer και τα μέλη της, ας εξερευνήσουμε την κατηγορία Array που σχετίζεται με το χώρο ονομάτων συστήματος Η κλάση Array περιέχει μια μέθοδο που ονομάζεται Copy () που μπορεί να χρησιμοποιηθεί για την αντιγραφή των περιεχομένων μιας συστοιχίας σε άλλη.

Η κλάση Buffer στο χώρο ονομάτων συστήματος περιέχει μια μέθοδο που ονομάζεται BlockCopy () που κάνει το ίδιο πράγμα. Μπορείτε να χρησιμοποιήσετε το BlockCopy () για να αντιγράψετε τα περιεχόμενα ενός πίνακα προέλευσης σε έναν πίνακα προορισμού. Πρέπει να σημειωθεί ότι η μέθοδος Buffer.BlockCopy είναι πολύ ταχύτερη από τη μέθοδο Array.Copy. Η κατηγορία Buffer περιέχει επίσης άλλες μεθόδους, όπως ByteLength, GetByte και SetByte.

Λάβετε υπόψη ότι η μέθοδος BlockCopy δεν αντιγράφει τα στοιχεία ενός πίνακα προέλευσης. Αντίθετα, το BlockCopy αντιγράφει μια ακολουθία byte από τον πίνακα προέλευσης στον πίνακα προορισμού.

Αντιγραφή byte μεταξύ δύο συστοιχιών στο C #

Μπορείτε να επωφεληθείτε από τη μέθοδο Buffer.BlockCopy για να αντιγράψετε byte μεταξύ ενός πίνακα προέλευσης και ενός πίνακα προορισμού - όπως φαίνεται στο απόσπασμα κώδικα που δίνεται παρακάτω.

στατικό κενό Κεντρικό ()

{

σύντομη [] arr1 = νέα σύντομη [] {1, 2, 3, 4, 5};

σύντομη [] arr2 = νέα σύντομη [10];

int sourceOffset = 0;

int destinationOffset = 0;

int count = 2 * sizeof (κοντό);

Buffer.BlockCopy (arr1, sourceOffset, arr2, destinationOffset, count);

για (int i = 0; i <arr2. Μήκος; i ++)

  {

Console.WriteLine (arr2 [i]);

  }

Κονσόλα.ReadKey ();

}

Όταν εκτελείτε το παραπάνω πρόγραμμα, δείτε πώς θα φαίνεται η έξοδος στο παράθυρο της κονσόλας.

Βρείτε το μήκος byte ενός πίνακα σε C #

Για να μάθετε το μήκος ενός πίνακα, μπορείτε να επωφεληθείτε από τη μέθοδο ByteLength της κατηγορίας Buffer, όπως φαίνεται στο παρακάτω παράδειγμα κώδικα.

στατικό κενό Κεντρικό ()

{

σύντομη [] arr1 = νέα σύντομη [] {1, 2, 3, 4, 5};

σύντομη [] arr2 = νέα σύντομη [10];

Console.WriteLine ("Το μήκος του arr1 είναι: {0}",

Buffer.ByteLength (arr1));

Console.WriteLine ("Το μήκος του arr2 είναι: {0}",

Buffer.ByteLength (arr2));

Κονσόλα.ReadKey ();

}

Όταν εκτελείτε το παραπάνω πρόγραμμα, πώς θα φαίνεται η έξοδος:

Οι μέθοδοι SetByte και GetByte της κατηγορίας Buffer μπορούν να χρησιμοποιηθούν για τον ορισμό ή την ανάγνωση μεμονωμένων byte από και προς έναν πίνακα αντίστοιχα. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορούν να χρησιμοποιηθούν οι μέθοδοι SetByte και GetByte.

στατικό κενό Κεντρικό ()

{

σύντομη [] arr1 = {5, 25};

int length = Buffer.ByteLength (arr1);

Console.WriteLine ("\ nΟ αρχικός πίνακας έχει ως εξής: -");

για (int i = 0; i <length; i ++)

{

byte b = Buffer.GetByte (arr1, i);

Console.WriteLine (b);

}

Buffer.SetByte (arr1, 0, 100);

Buffer.SetByte (arr1, 1, 100);

Console.WriteLine ("\ nΟ τροποποιημένος πίνακας έχει ως εξής: -");

για (int i = 0; i <Buffer.ByteLength (arr1); i ++)

{

byte b = Buffer.GetByte (arr1, i);

Console.WriteLine (b);

}

Κονσόλα.ReadKey ();

}

Όταν εκτελείτε το παραπάνω πρόγραμμα, δείτε πώς θα εμφανιστεί η έξοδος.

Η κατηγορία Buffer παρέχει πολύ καλύτερη απόδοση όταν χειρίζεστε μια περιοχή μνήμης που περιέχει πρωτόγονους τύπους. Θα πρέπει να επωφεληθείτε από την κατηγορία Buffer όποτε χρειαστεί να χειριστείτε δεδομένα στη μνήμη και όποτε χρειάζεστε γρήγορη πρόσβαση σε δεδομένα που είναι αποθηκευμένα στη μνήμη.

Πώς να κάνετε περισσότερα στο C #:

  • Πώς να χρησιμοποιήσετε το HashSet στο C #
  • Τρόπος χρήσης των ονομαστικών και προαιρετικών παραμέτρων στο C #
  • Τρόπος συγκριτικής αξιολόγησης κώδικα C # χρησιμοποιώντας BenchmarkDotNet
  • Πώς να χρησιμοποιήσετε άπλετες διεπαφές και αλυσίδες μεθόδων στο C #
  • Πώς να ενοποιήσετε τις στατικές μεθόδους δοκιμής στο C #
  • Πώς να αναπαράγετε αντικείμενα του Θεού στο C #
  • Πώς να χρησιμοποιήσετε το ValueTask σε C #
  • Πώς να χρησιμοποιήσετε το αμετάβλητο στο C
  • Πώς να χρησιμοποιήσετε const, μόνο για ανάγνωση και στατικό σε C #
  • Πώς να χρησιμοποιήσετε σχολιασμούς δεδομένων στο C #
  • Πώς να εργαστείτε με GUID στο C # 8
  • Πότε να χρησιμοποιήσετε μια αφηρημένη τάξη εναντίον διεπαφής στο C #
  • Πώς να εργαστείτε με το AutoMapper στο C #
  • Πώς να χρησιμοποιήσετε τις εκφράσεις λάμδα στο C #
  • Πώς να συνεργαστείτε με τους αντιπροσώπους Action, Func και Predicate στο C #
  • Πώς να συνεργαστείτε με εκπροσώπους στο C #
  • Πώς να εφαρμόσετε έναν απλό καταγραφέα στο C #
  • Πώς να εργαστείτε με χαρακτηριστικά στο C #
  • Πώς να εργαστείτε με το log4net στο C #
  • Πώς να εφαρμόσετε το μοτίβο σχεδίασης αποθετηρίου στο C #
  • Πώς να εργαστείτε με προβληματισμό στο C #
  • Πώς να εργαστείτε με το σύστημα παρακολούθησης αρχείων στο C #
  • Πώς να εκτελέσετε τεμπέλης αρχικοποίηση στο C #
  • Πώς να εργαστείτε με το MSMQ στο C #
  • Πώς να εργαστείτε με μεθόδους επέκτασης στο C #
  • Πώς να μας εκφράσεις λάμδα στο C #
  • Πότε να χρησιμοποιήσετε την ευμετάβλητη λέξη-κλειδί στο C #
  • Πώς να χρησιμοποιήσετε τη λέξη-κλειδί απόδοσης στο C #
  • Πώς να εφαρμόσετε τον πολυμορφισμό στο C #
  • Πώς να δημιουργήσετε τον δικό σας προγραμματιστή εργασιών στο C #
  • Πώς να εργαστείτε με το RabbitMQ στο C #
  • Πώς να εργαστείτε με μια πλειάδα στο C #
  • Εξερεύνηση εικονικών και αφηρημένων μεθόδων στο C #
  • Πώς να χρησιμοποιήσετε το Dapper ORM στο C #
  • Πώς να χρησιμοποιήσετε το μοτίβο σχεδιασμού flyweight στο C #