Programiranje

Kako uporabiti razred medpomnilnika v jeziku C #

Medpomnilnik je zaporedje bajtov v pomnilniku, medpomnjenje pa je manipulacija s podatki, ki se nahajajo v pomnilniku. V medpomnilniku .NET se nanaša na manipulacijo z neupravljanim pomnilnikom, ki je predstavljen kot niz bajtov.

Morda boste želeli izkoristiti razred System.Buffer v .NET, kadar koli želite neposredno zapisovati podatke v pomnilnik ali kadar želite manipulirati s podatki, shranjenimi v neupravljanem pomnilniku. Ta članek govori o tem, kako lahko delamo z razredom Buffer v jeziku C #.

Če želite delati s primeri kod v tem članku, morate imeti v sistemu nameščen Visual Studio 2019. Če kopije še nimate, lahko Visual Studio 2019 prenesete tukaj.

Ustvarite projektni program konzole .NET Core v Visual Studio

Najprej ustvarimo aplikacijski projekt konzole .NET Core v Visual Studio. Ob predpostavki, da je Visual Studio 2019 nameščen v vašem sistemu, sledite spodnjim korakom, da ustvarite nov aplikacijski projekt konzole .NET Core v Visual Studio.

  1. Zaženite Visual Studio IDE.
  2. Kliknite »Ustvari nov projekt«.
  3. V oknu »Ustvari nov projekt« na seznamu predlog izberite »Console App (.NET Core)«.
  4. Kliknite Naprej.
  5. V naslednjem oknu »Konfiguriranje novega projekta« določite ime in mesto novega projekta.
  6. Kliknite Ustvari.

Tako boste ustvarili nov aplikacijski projekt konzole .NET Core v Visual Studio 2019. Ta projekt bomo uporabili v naslednjih razdelkih tega članka.

Metode razreda medpomnilnika v .NET

Razred medpomnilnika vsebuje naslednje metode:

  • BlockCopy (Array, Int32, Array, Int32) se uporablja za kopiranje izvorne matrike iz določenega odmika v ciljno matriko pri določenem odmiku.
  • ByteLength (Array) vrne skupno število bajtov v matriki, tj. Dolžino matrike.
  • GetByte (Array, Int32) se uporablja za pridobivanje bajta na določenem mestu v matriki.
  • SetByte (Array, Int32, Byte) se uporablja za nastavitev bajta na dano mesto v matriki.
  • MemoryCopy (Void *, Void *, Int64, Int64) in MemoryCopy (Void *, Void *, UInt64, UInt64) se uporabljajo za kopiranje več bajtov z izvornega naslova v pomnilniku na drug naslov.

Uporaba nizov in vmesnih pomnilnikov v jeziku C #

Preden začnemo delati z razredom Buffer in njegovimi člani, raziščimo razred Array, ki se nanaša na imenski prostor System. Razred Array vsebuje metodo z imenom Copy (), ki jo lahko uporabimo za kopiranje vsebine enega polja v drugo.

Razred medpomnilnika v imenskem prostoru System vsebuje metodo z imenom BlockCopy (), ki naredi isto. BlockCopy () lahko uporabite za kopiranje vsebine izvornega polja v ciljno polje. Upoštevati je treba, da je metoda Buffer.BlockCopy veliko hitrejša od metode Array.Copy. Razred medpomnilnika vsebuje tudi druge metode, kot so ByteLength, GetByte in SetByte.

Metoda BlockCopy ne kopira elementov izvorne matrike. BlockCopy kopira zaporedje bajtov iz izvornega polja v ciljno polje.

Kopirajte bajte med dvema nizoma v C #

Metodo Buffer.BlockCopy lahko izkoristite za kopiranje bajtov med izvorno matriko in ciljno matriko - kot je prikazano v spodnjem delčku kode.

statična praznina Main ()

{

kratek [] arr1 = nov kratek [] {1, 2, 3, 4, 5};

kratek [] arr2 = nov kratek [10];

int sourceOffset = 0;

int destinationOffset = 0;

int count = 2 * sizeof (kratek);

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

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

  {

Console.WriteLine (arr2 [i]);

  }

Console.ReadKey ();

}

Ko zaženete zgornji program, je tukaj videti, kako bo rezultat prikazan v oknu konzole.

Poiščite dolžino bajta matrike v C #

Če želite ugotoviti dolžino polja, lahko izkoristite metodo ByteLength razreda Buffer, kot je prikazano v spodnjem primeru kode.

statična praznina Main ()

{

kratek [] arr1 = nov kratek [] {1, 2, 3, 4, 5};

kratek [] arr2 = nov kratek [10];

Console.WriteLine ("Dolžina arr1 je: {0}",

Pufer.ByteLength (arr1));

Console.WriteLine ("Dolžina arr2 je: {0}",

Pufer.ByteLength (arr2));

Console.ReadKey ();

}

Ko zaženete zgornji program, je videti, kako bo rezultat:

Metodi SetByte in GetByte iz razreda Buffer lahko uporabite za nastavitev ali branje posameznih bajtov v matriko in iz nje. Naslednji odrezek kode prikazuje, kako je mogoče uporabiti metodi SetByte in GetByte.

statična praznina Main ()

{

kratek [] arr1 = {5, 25};

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

Console.WriteLine ("\ nIzvirna matrika je naslednja: -");

za (int i = 0; i <dolžina; i ++)

{

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

Console.WriteLine (b);

}

Buffer.SetByte (arr1, 0, 100);

Buffer.SetByte (arr1, 1, 100);

Console.WriteLine ("\ nModificirana matrika je naslednja: -");

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

{

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

Console.WriteLine (b);

}

Console.ReadKey ();

}

Ko zaženete zgornji program, je tukaj prikazan rezultat.

Razred Buffer zagotavlja veliko boljše delovanje pri manipuliranju s področjem pomnilnika, ki vsebuje primitivne tipe. Razred Buffer bi morali izkoristiti, kadar koli potrebujete podatke v pomnilniku in kadar koli potrebujete hiter dostop do podatkov, shranjenih v pomnilniku.

Kako narediti več v jeziku C #:

  • Kako uporabljati HashSet v C #
  • Kako uporabljati imenovane in neobvezne parametre v jeziku C #
  • Kako primerjati kodo C # z uporabo BenchmarkDotNet
  • Kako uporabljati tekoče vmesnike in verigo metod v jeziku C #
  • Kako enotno preizkusiti statične metode v C #
  • Kako preoblikovati božje predmete v C #
  • Kako uporabljati ValueTask v jeziku C #
  • Kako uporabiti nespremenljivost v C
  • Kako uporabljati const, readonly in static v C #
  • Kako uporabljati pripise podatkov v jeziku C #
  • Kako delati z GUID-i v C # 8
  • Kdaj uporabiti abstraktni razred v primerjavi z vmesnikom v jeziku C #
  • Kako delati z AutoMapper v C #
  • Kako uporabljati lambda izraze v jeziku C #
  • Kako delati z delegati Action, Func in Predicate v C #
  • Kako delati z delegati v C #
  • Kako implementirati preprost zapisovalnik v jeziku C #
  • Kako delati z atributi v jeziku C #
  • Kako delati z log4net v C #
  • Kako implementirati vzorec oblikovanja repozitorija v C #
  • Kako delati z refleksijo v jeziku C #
  • Kako delati z nadzornikom datotek v C #
  • Kako izvesti leno inicializacijo v C #
  • Kako delati z MSMQ v C #
  • Kako delati z razširitvenimi metodami v jeziku C #
  • Kako do lambda izrazov v jeziku C #
  • Kdaj uporabiti hlapljivo ključno besedo v jeziku C #
  • Kako uporabiti ključno besedo yield v jeziku C #
  • Kako uporabiti polimorfizem v jeziku C #
  • Kako zgraditi lasten načrtovalnik opravil v C #
  • Kako delati z RabbitMQ v C #
  • Kako delati s korpico v jeziku C #
  • Raziskovanje virtualnih in abstraktnih metod v jeziku C #
  • Kako uporabljati Dapper ORM v C #
  • Kako uporabiti vzorec letenja v C #
$config[zx-auto] not found$config[zx-overlay] not found