Programovanie

Ako používať triedu vyrovnávacej pamäte v C #

Vyrovnávacia pamäť je postupnosť bajtov v pamäti a vyrovnávacia pamäť predstavuje manipuláciu s údajmi uloženými v pamäti. V .NET buffering sa týka manipulácie s nespravovanou pamäťou, ktorá je reprezentovaná ako pole bajtov.

Možno budete chcieť využiť výhodu triedy System.Buffer v .NET vždy, keď potrebujete priamo zapisovať údaje do pamäte, alebo kedykoľvek chcete manipulovať s údajmi uloženými v nespravovanej pamäti. Tento článok hovorí o tom, ako môžeme pracovať s triedou Buffer v C #.

Ak chcete pracovať s príkladmi kódu uvedenými v tomto článku, mali by ste mať vo svojom systéme nainštalovanú aplikáciu Visual Studio 2019. Ak ešte nemáte kópiu, môžete si tu stiahnuť Visual Studio 2019.

Vytvorte projekt konzolovej aplikácie .NET Core v Visual Studio

Najprv si vytvoríme projekt konzolovej aplikácie .NET Core v Visual Studio. Za predpokladu, že je vo vašom systéme nainštalované Visual Studio 2019, vytvorte nový projekt konzolovej aplikácie .NET Core v Visual Studio podľa pokynov uvedených nižšie.

  1. Spustite Visual Studio IDE.
  2. Kliknite na „Vytvoriť nový projekt“.
  3. V okne „Vytvoriť nový projekt“ vyberte zo zobrazeného zoznamu šablón „Console App (.NET Core)“.
  4. Kliknite na Ďalej.
  5. V nasledujúcom okne „Konfigurácia nového projektu“ zadajte názov a umiestnenie nového projektu.
  6. Kliknite na tlačidlo Vytvoriť.

Týmto sa vytvorí nový projekt konzolovej aplikácie .NET Core v Visual Studio 2019. Tento projekt použijeme v ďalších častiach tohto článku.

Metódy triedy Buffer v .NET

Trieda Buffer obsahuje nasledujúce metódy:

  • BlockCopy (Array, Int32, Array, Int32) sa používa na kopírovanie zdrojového poľa zo zadaného posunu do cieľového poľa so zadaným posunom.
  • ByteLength (Array) vracia celkový počet bajtov v poli, t. J. Dĺžku poľa.
  • GetByte (Array, Int32) sa používa na získanie bajtu na určenom mieste v poli.
  • SetByte (Array, Int32, Byte) sa používa na nastavenie bajtu na danom mieste v poli.
  • MemoryCopy (Void *, Void *, Int64, Int64) a MemoryCopy (Void *, Void *, UInt64, UInt64) sa používajú na kopírovanie niekoľkých bajtov zo zdrojovej adresy v pamäti na inú adresu.

Používanie polí a vyrovnávacích pamätí v C #

Predtým, ako začneme pracovať s triedou Buffer a jej členmi, poďme sa pozrieť na triedu Array týkajúcu sa menného priestoru System. Trieda Array obsahuje metódu s názvom Copy (), ktorú je možné použiť na kopírovanie obsahu jedného poľa do druhého.

Trieda Buffer v mennom priestore System obsahuje metódu s názvom BlockCopy (), ktorá robí to isté. Na kopírovanie obsahu zdrojového poľa do cieľového poľa môžete použiť BlockCopy (). Je potrebné poznamenať, že metóda Buffer.BlockCopy je oveľa rýchlejšia ako metóda Array.Copy. Trieda Buffer obsahuje aj ďalšie metódy, ako napríklad ByteLength, GetByte a SetByte.

Upozorňujeme, že metóda BlockCopy nekopíruje prvky zdrojového poľa. BlockCopy skôr kopíruje sekvenciu bajtov zo zdrojového poľa do cieľového poľa.

Kopírovanie bajtov medzi dvoma poľami v C #

Môžete použiť výhodu metódy Buffer.BlockCopy na kopírovanie bajtov medzi zdrojovým a cieľovým poľom - ako je uvedené v útržku kódu uvedenom nižšie.

static void Main ()

{

short [] arr1 = new short [] {1, 2, 3, 4, 5};

short [] arr2 = new short [10];

int sourceOffset = 0;

int destinationOffset = 0;

počet int = 2 * sizeof (short);

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

pre (int i = 0; i <arr2.Length; i ++)

  {

Console.WriteLine (arr2 [i]);

  }

Console.ReadKey ();

}

Keď spustíte vyššie uvedený program, výstup bude vyzerať v okne konzoly.

Nájdite dĺžku bajtu poľa v C #

Ak chcete zistiť dĺžku poľa, môžete využiť metódu ByteLength triedy Buffer, ako je uvedené v príklade kódu uvedenom nižšie.

static void Main ()

{

short [] arr1 = new short [] {1, 2, 3, 4, 5};

short [] arr2 = new short [10];

Console.WriteLine ("Dĺžka súboru arr1 je: {0}",

Buffer.ByteLength (arr1));

Console.WriteLine ("Dĺžka arr2 je: {0}",

Buffer.ByteLength (arr2));

Console.ReadKey ();

}

Keď spustíte vyššie uvedený program, výstup bude vyzerať takto:

Metódy SetByte a GetByte triedy Buffer možno použiť na nastavenie alebo čítanie jednotlivých bajtov do a z poľa. Nasledujúci úryvok kódu ilustruje, ako je možné použiť metódy SetByte a GetByte.

static void Main ()

{

krátke [] arr1 = {5, 25};

int dĺžka = Buffer.ByteLength (arr1);

Console.WriteLine ("\ nPôvodné pole je nasledujúce: -");

pre (int i = 0; i <dĺžka; i ++)

{

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

Console.WriteLine (b);

}

Buffer.SetByte (arr1, 0, 100);

Buffer.SetByte (arr1, 1, 100);

Console.WriteLine ("\ nÚpravené pole je nasledovné: -");

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

{

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

Console.WriteLine (b);

}

Console.ReadKey ();

}

Po vykonaní vyššie uvedeného programu by sa výstup zobrazil nasledovne.

Trieda Buffer poskytuje oveľa lepší výkon pri manipulácii s oblasťou pamäte, ktorá obsahuje primitívne typy. Triedu Buffer by ste mali využiť vždy, keď potrebujete manipulovať s údajmi v pamäti a kedykoľvek potrebujete rýchly prístup k údajom uloženým v pamäti.

Ako urobiť viac v C #:

  • Ako používať HashSet v C #
  • Ako používať pomenované a voliteľné parametre v C #
  • Ako porovnávať kód C # pomocou BenchmarkDotNet
  • Ako používať plynulé rozhrania a reťazenie metód v C #
  • Ako testovať statické metódy v C #
  • Ako refaktorovať objekty Boha v C #
  • Ako používať ValueTask v C #
  • Ako používať nemennosť v C.
  • Ako používať const, readonly a static v C #
  • Ako používať dátové anotácie v C #
  • Ako pracovať s identifikátormi GUID v C # 8
  • Kedy použiť abstraktné rozhranie vs. rozhranie v C #
  • Ako pracovať s AutoMapperom v C #
  • Ako používať výrazy lambda v C #
  • Ako pracovať s delegátmi Action, Func a Predicate v C #
  • Ako pracovať s delegátmi v C #
  • Ako implementovať jednoduchý záznamník v C #
  • Ako pracovať s atribútmi v C #
  • Ako pracovať s log4net v C #
  • Ako implementovať vzor návrhu úložiska v C #
  • Ako pracovať s odrazom v C #
  • Ako pracovať so súborovým systémom v C #
  • Ako vykonať lenivú inicializáciu v C #
  • Ako pracovať s MSMQ v C #
  • Ako pracovať s metódami rozšírenia v C #
  • Ako na nás výrazy lambda v C #
  • Kedy použiť volatile kľúčové slovo v C #
  • Ako používať kľúčové slovo výťažku v C #
  • Ako implementovať polymorfizmus v C #
  • Ako zostaviť vlastný plánovač úloh v C #
  • Ako pracovať s RabbitMQ v C #
  • Ako pracovať s n-ticí v C #
  • Skúmanie virtuálnych a abstraktných metód v C #
  • Ako používať Dapper ORM v C #
  • Ako používať návrhový vzor mušej váhy v C #