Kako koristiti klasu pufer u C #

Međuspremnik je slijed bajtova u memoriji, a međuspremnik je manipulacija podacima koji se nalaze u memoriji. U .NET međuspremniku odnosi se na manipulaciju neupravljanom memorijom, koja je predstavljena kao niz bajtova. 

Možda biste željeli iskoristiti klasu System.Buffer u .NET-u kad god trebate izravno upisivati ​​podatke u memoriju ili kad god želite manipulirati podacima pohranjenima u neupravljanoj memoriji. Ovaj članak govori o tome kako možemo raditi s klasom Buffer u C #. 

Da biste radili s primjerima koda iz ovog članka, u sustavu biste trebali instalirati Visual Studio 2019. Ako još nemate kopiju, ovdje možete preuzeti Visual Studio 2019.

Stvorite projekt aplikacije konzole .NET Core u Visual Studiju

Prvo, kreirajmo projekt aplikacije .NET Core konzole u Visual Studiju. Pod pretpostavkom da je Visual Studio 2019 instaliran u vašem sustavu, slijedite korake opisane u nastavku da biste u Visual Studiju stvorili novi projektni program konzole .NET Core.

  1. Pokrenite Visual Studio IDE.
  2. Kliknite "Stvori novi projekt".
  3. U prozoru "Stvori novi projekt" s popisa predložaka odaberite "Aplikacija konzole (.NET Core)".
  4. Kliknite Dalje.
  5. U sljedećem prozoru "Konfiguriranje novog projekta" navedite naziv i mjesto za novi projekt.
  6. Kliknite Stvori.

To će stvoriti novi projektni program konzole .NET Core u Visual Studio 2019. Ovaj ćemo projekt koristiti u sljedećim odjeljcima ovog članka.

Metode klase Buffer u .NET-u

Klasa Buffer sadrži sljedeće metode:

  • BlockCopy (Array, Int32, Array, Int32) koristi se za kopiranje izvornog niza iz određenog odmaka u ciljni niz s navedenim odmakom.
  • ByteLength (Array) vraća ukupan broj bajtova u polju, tj. Duljinu niza.
  • GetByte (Array, Int32) koristi se za dohvatanje bajta na određenom mjestu u polju.
  • SetByte (Array, Int32, Byte) koristi se za postavljanje bajta na određeno mjesto u polju.
  • MemoryCopy (Void *, Void *, Int64, Int64) i MemoryCopy (Void *, Void *, UInt64, UInt64) koriste se za kopiranje određenog broja bajtova s ​​izvorne adrese u memoriji na drugu adresu.

Korištenje polja i međuspremnika u C #

Prije nego što počnemo raditi s razredom Buffer i njegovim članovima, istražimo klasu Array koja se odnosi na prostor imena System. Klasa Array sadrži metodu pod nazivom Copy () koja se može koristiti za kopiranje sadržaja jednog polja u drugi.

Klasa Buffer u prostoru imena System sadrži metodu koja se zove BlockCopy () koja radi istu stvar. BlockCopy () možete koristiti za kopiranje sadržaja izvornog niza u odredišni niz. Treba napomenuti da je metoda Buffer.BlockCopy mnogo brža od metode Array.Copy. Klasa Buffer također sadrži i druge metode poput ByteLength, GetByte i SetByte.

Napominjemo da metoda BlockCopy ne kopira elemente izvornog niza. Umjesto toga, BlockCopy kopira slijed bajtova iz izvornog niza u odredišni niz.

Kopirajte bajtove između dva polja u C #

Možete iskoristiti metodu Buffer.BlockCopy za kopiranje bajtova između izvornog niza i odredišnog niza - kao što je prikazano u isječku koda koji je dan u nastavku.

statička praznina Glavna ()

{

  kratki [] arr1 = novi kratki [] {1, 2, 3, 4, 5};

  kratki [] arr2 = novi kratki [10];

  int sourceOffset = 0;

  int destinationOffset = 0;

  int count = 2 * sizeof (kratko);

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

  za (int i = 0; i <arr2.Duljina; i ++)

  {

      Console.WriteLine (arr2 [i]);

  }

  Console.ReadKey ();

}

Kada izvršite gornji program, evo kako bi izlaz izgledao na prozoru konzole.

Pronađite duljinu bajta niza u C #

Da biste saznali duljinu niza, možete iskoristiti metodu ByteLength klase Buffer, kao što je prikazano u donjem primjeru koda.

statička praznina Glavna ()

{

  kratki [] arr1 = novi kratki [] {1, 2, 3, 4, 5};

  kratki [] arr2 = novi kratki [10];

  Console.WriteLine ("Duljina arr1 je: {0}",

  Pufer.ByteLength (arr1));

  Console.WriteLine ("Duljina arr2 je: {0}",

  Pufer.ByteLength (arr2));

  Console.ReadKey ();

}

Kada pokrenete gornji program, evo kako bi izgledao izlaz:

Metode SetByte i GetByte klase Buffer mogu se koristiti za postavljanje ili čitanje pojedinačnih bajtova u i iz niza. Sljedeći isječak koda ilustrira kako se metode SetByte i GetByte mogu koristiti.

statička praznina Glavna ()

{

kratki [] arr1 = {5, 25};

int dužina = Buffer.ByteLength (arr1);

Console.WriteLine ("\ nOriginalni niz je sljedeći: -");

za (int i = 0; i <duljina; i ++)

{

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

      Console.WriteLine (b);

}

Buffer.SetByte (arr1, 0, 100);

Buffer.SetByte (arr1, 1, 100);

Console.WriteLine ("\ nModificirani niz je sljedeći: -");

for (int i = 0; i <Buffer.ByteLength (arr1); i ++)

{

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

      Console.WriteLine (b);

}

    Console.ReadKey ();

}

Kada izvršite gornji program, evo kako će se prikazati izlaz.

Klasa Buffer pruža mnogo bolje performanse pri manipuliranju regijom memorije koja sadrži primitivne tipove. Trebali biste iskoristiti klasu Buffer kad god trebate manipulirati podacima u memoriji i kad god vam je potreban brzi pristup podacima pohranjenim u memoriji.

Kako učiniti više u C #:

  • Kako koristiti HashSet u C #
  • Kako koristiti imenovane i neobavezne parametre u C #
  • Kako odrediti C # kod pomoću BenchmarkDotNet-a
  • Kako koristiti tečna sučelja i ulančavanje metoda u C #
  • Kako jedinica testirati statičke metode u C #
  • Kako refaktorirati Božje objekte u C #
  • Kako koristiti ValueTask u C #
  • Kako se koristi nepromjenjivost u C
  • Kako koristiti const, readonly i static u C #
  • Kako koristiti bilješke podataka u C #
  • Kako raditi s GUID-ovima u C # 8
  • Kada koristiti apstraktnu klasu naspram sučelja u C #
  • Kako raditi s AutoMapperom u C #
  • Kako koristiti lambda izraze u C #
  • Kako raditi s delegatima Action, Func i Predicate u C #
  • Kako raditi s delegatima u C #
  • Kako implementirati jednostavni zapisnik u C #
  • Kako raditi s atributima u C #
  • Kako raditi s log4netom na C #
  • Kako implementirati obrazac dizajna spremišta u C #
  • Kako raditi s refleksijom u C #
  • Kako raditi s nadzornikom datoteka u C #
  • Kako izvesti lijenu inicijalizaciju u C #
  • Kako raditi s MSMQ-om u C #
  • Kako raditi s metodama produženja u C #
  • Kako do nas lambda izrazi u C #
  • Kada upotrijebiti hlapljivu ključnu riječ u C #
  • Kako koristiti ključnu riječ yield u C #
  • Kako implementirati polimorfizam u C #
  • Kako izraditi vlastiti planer zadataka u C #
  • Kako raditi s RabbitMQ u C #
  • Kako raditi s korpicom u C #
  • Istraživanje virtualnih i apstraktnih metoda u C #
  • Kako koristiti Dapper ORM u C #
  • Kako koristiti uzorak dizajna muhe u C #