Ohjelmointi

Kuinka käyttää puskuriluokkaa C #: ssa

Puskuri on tavujärjestys muistissa ja puskurointi on muistissa olevien tietojen käsittely. NET-puskurointi viittaa hallitsemattoman muistin manipulointiin, joka on esitetty tavujärjestelmänä.

Haluat ehkä käyttää .NET-järjestelmän System.Buffer-luokkaa aina, kun sinun on kirjoitettava tietoja suoraan muistiin tai kun haluat käsitellä hallitsemattomaan muistiin tallennettuja tietoja. Tämä artikkeli kertoo kuinka voimme työskennellä puskuriluokan kanssa C #: ssä.

Jotta voit työskennellä tässä artikkelissa annettujen koodiesimerkkien kanssa, järjestelmässäsi on oltava asennettuna Visual Studio 2019. Jos sinulla ei vielä ole kopiota, voit ladata Visual Studio 2019 täältä.

Luo .NET Core -konsolisovellusprojekti Visual Studiossa

Ensinnäkin, luodaan .NET Core -konsolisovellusprojekti Visual Studiossa. Olettaen, että Visual Studio 2019 on asennettu järjestelmään, luo uusi .NET Core -konsolisovellusprojekti Visual Studiossa noudattamalla seuraavia ohjeita.

  1. Käynnistä Visual Studio IDE.
  2. Napsauta Luo uusi projekti.
  3. Valitse Luo uusi projekti -ikkunassa ”Console App (.NET Core)” näytetystä malliluettelosta.
  4. Napsauta Seuraava.
  5. Määritä seuraavan projektin nimi ja sijainti uuden Konfiguroi uusi projekti -ikkunassa.
  6. Napsauta Luo.

Tämä luo uuden .NET Core -konsolisovellusprojektin Visual Studio 2019: ssä. Käytämme tätä projektia tämän artikkelin seuraavissa osissa.

.NET-puskuriluokan menetelmät

Puskuriluokka sisältää seuraavat menetelmät:

  • BlockCopy (Array, Int32, Array, Int32) käytetään lähdematriisin kopioimiseen määritetystä siirtymästä kohdematriisiin tietyllä siirtymällä.
  • ByteLength (Array) palauttaa taulukon tavujen kokonaismäärän, eli taulukon pituuden.
  • GetByte (Array, Int32) käytetään tavun hakemiseen matriisin määritetystä sijainnista.
  • SetBytea (taulukko, Int32, tavu) käytetään tavun asettamiseen tietyssä taulukon kohdassa.
  • MemoryCopy (Void *, Void *, Int64, Int64) ja MemoryCopy (Void *, Void *, UInt64, UInt64) käytetään kopioimaan tavujen määrä muistin lähdeosoitteesta toiseen osoitteeseen.

Taulukoiden ja puskureiden käyttäminen C #: ssä

Ennen kuin aloitamme työskentelyn Buffer-luokan ja sen jäsenten kanssa, tutkitaan Järjestelmän nimiavaruuteen liittyvää Array-luokkaa. Array-luokka sisältää menetelmän nimeltä Copy (), jota voidaan käyttää yhden taulukon sisällön kopioimiseen toiseen.

Järjestelmän nimiavaruuden puskuriluokka sisältää menetelmän nimeltä BlockCopy (), joka tekee saman. Voit kopioida lähdematriisin sisällön kohdetaulukkoon BlockCopy (): n avulla. On huomattava, että Buffer.BlockCopy-menetelmä on paljon nopeampi kuin Array.Copy-menetelmä. Puskuriluokka sisältää myös muita menetelmiä, kuten ByteLength, GetByte ja SetByte.

Huomaa, että BlockCopy-menetelmä ei kopioi lähdematriisin elementtejä. Pikemminkin BlockCopy kopioi tavusarjan lähdematriisista kohdetaulukkoon.

Kopioi tavut kahden taulukon välillä C #

Voit hyödyntää Buffer.BlockCopy-menetelmää tavujen kopioimiseksi lähdematriisin ja kohdematriisin välillä - kuten alla olevassa koodinpätkässä näkyy.

staattinen void Main ()

{

lyhyt [] arr1 = uusi lyhyt [] {1, 2, 3, 4, 5};

lyhyt [] arr2 = uusi lyhyt [10];

int lähdeOffset = 0;

int kohdeOffset = 0;

int count = 2 * koko (lyhyt);

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

for (int i = 0; i <arr2.Pituus; i ++)

  {

Console.WriteLine (arr2 [i]);

  }

Console.ReadKey ();

}

Kun suoritat yllä olevan ohjelman, tulos näyttäisi konsoli-ikkunasta seuraavasti.

Etsi taulukon tavun pituus C #: ssä

Taulukon pituuden selvittämiseksi voit hyödyntää puskuriluokan ByteLength-menetelmää alla olevan koodiesimerkin mukaisesti.

staattinen void Main ()

{

lyhyt [] arr1 = uusi lyhyt [] {1, 2, 3, 4, 5};

lyhyt [] arr2 = uusi lyhyt [10];

Console.WriteLine ("arr1: n pituus on: {0}",

Puskuri. Tavun pituus (arr1));

Console.WriteLine ("Arr2: n pituus on: {0}",

Puskuri. Tavun pituus (arr2));

Console.ReadKey ();

}

Kun suoritat yllä olevan ohjelman, tulos näyttää miltä:

Puskuriluokan SetByte- ja GetByte-menetelmiä voidaan käyttää asettamaan tai lukemaan yksittäisiä tavuja matriisiin ja vastaavasti ryhmästä. Seuraava koodinpätkä kuvaa, kuinka SetByte- ja GetByte-menetelmiä voidaan käyttää.

staattinen void Main ()

{

lyhyt [] arr1 = {5, 25};

int pituus = puskuri. tavun pituus (arr1);

Console.WriteLine ("\ nAlkuperäinen taulukko on seuraava: -");

for (int i = 0; i <pituus; i ++)

{

tavu b = puskuri. GetByte (arr1, i);

Console.WriteLine (b);

}

Puskuri: SetByte (arr1, 0, 100);

Puskuri: SetByte (arr1, 1, 100);

Console.WriteLine ("\ nMuokattu taulukko on seuraava: -");

for (int i = 0; i <puskuri. tavun pituus (arr1); i ++)

{

tavu b = puskuri. GetByte (arr1, i);

Console.WriteLine (b);

}

Console.ReadKey ();

}

Kun suoritat yllä olevan ohjelman, tulos näyttää tältä.

Puskuriluokka tarjoaa paljon paremman suorituskyvyn käsitellessä primitiivisiä tyyppejä sisältävää muistialueita. Sinun tulisi hyödyntää puskuriluokkaa aina, kun haluat käsitellä muistissa olevia tietoja ja kun tarvitset nopean pääsyn myös muistiin tallennettuihin tietoihin.

Kuinka tehdä enemmän C #: ssä:

  • HashSetin käyttäminen C #: ssä
  • Nimettyjen ja valinnaisten parametrien käyttäminen C #: ssä
  • Kuinka vertailla C # -koodia BenchmarkDotNetin avulla
  • Kuinka käyttää sujuvia rajapintoja ja menetelmäketjua C #: ssä
  • Staattisten menetelmien testaaminen yksikössä C #
  • Kuinka refactor Jumalan esineitä C #
  • Kuinka käyttää ValueTaskia C #: ssä
  • Kuinka käyttää muuttumattomuutta C: ssä
  • Kuinka käyttää const, readonly ja staattinen C #: ssä
  • Tietomerkintöjen käyttäminen C #: ssä
  • Kuinka käyttää GUID-tunnuksia C # 8: ssa
  • Milloin abstraktia luokkaa vs. käyttöliittymää käytetään C #: ssä
  • Kuinka työskennellä AutoMapperin kanssa C #: ssä
  • Kuinka käyttää lambda-lausekkeita C #: ssä
  • Kuinka toimia Action-, Func- ja Predicate-edustajien kanssa C #: ssä
  • Kuinka työskennellä C #: n edustajien kanssa
  • Kuinka toteuttaa yksinkertainen kirjaaja C #: ssä
  • Kuinka työskennellä attribuuttien kanssa C #: ssä
  • Kuinka työskennellä log4netin kanssa C #: ssä
  • Kuinka toteuttaa arkiston suunnittelumalli C #: ssä
  • Kuinka työskennellä heijastuksen kanssa C #: ssä
  • Kuinka työskennellä tiedostojärjestelmän katselijan kanssa C #: ssä
  • Kuinka tehdä laiska alustus C #: ssä
  • Kuinka työskennellä MSMQ: n kanssa C #: ssä
  • Kuinka työskennellä laajennusmenetelmien kanssa C #: ssä
  • Kuinka meille lambda-lausekkeet C #: ssä
  • Milloin haihtuvaa avainsanaa käytetään C #: ssä
  • Tuottoavainsanan käyttäminen C #: ssä
  • Kuinka toteuttaa polymorfismi C #: ssa
  • Kuinka rakentaa oma tehtävän ajastin C #
  • Kuinka työskennellä RabbitMQ: n kanssa C #: ssä
  • Kuinka työskennellä C #: n kanssa
  • Virtuaalisten ja abstraktien menetelmien tutkiminen C #: ssä
  • Kuinka käyttää Dapper ORMia C #: ssä
  • Lentopainokuvion käyttäminen C #: ssä