Programavimas

Kaip naudoti buferio klasę C #

Buferis yra baitų seka atmintyje, o buferis yra manipuliavimas atmintyje esančiais duomenimis. .NET buferis reiškia manipuliavimą nevaldoma atmintimi, kuri vaizduojama kaip baitų masyvas.

Galbūt norėsite pasinaudoti „System.Buffer“ klase .NET, kai jums reikia tiesiogiai įrašyti duomenis į atmintį arba kai norite tvarkyti duomenis, saugomus nevaldomoje atmintyje. Šiame straipsnyje kalbama apie tai, kaip galime dirbti su buferio klase C #.

Norėdami dirbti su šiame straipsnyje pateiktais kodų pavyzdžiais, sistemoje turite būti įdiegę „Visual Studio 2019“. Jei dar neturite kopijos, galite atsisiųsti „Visual Studio 2019“ čia.

„Visual Studio“ sukurkite .NET Core konsolės programos projektą

Pirmiausia sukurkime .NET Core konsolės programos projektą „Visual Studio“. Darant prielaidą, kad „Visual Studio 2019“ yra įdiegta jūsų sistemoje, atlikite toliau nurodytus veiksmus, kad sukurtumėte naują .NET Core konsolės programos projektą „Visual Studio“.

  1. Paleiskite „Visual Studio IDE“.
  2. Spustelėkite „Sukurti naują projektą“.
  3. Lange „Kurti naują projektą“ iš rodomų šablonų sąrašo pasirinkite „Console App (.NET Core)“.
  4. Spustelėkite Pirmyn.
  5. Tada rodomame lange „Konfigūruoti naują projektą“ nurodykite naujo projekto pavadinimą ir vietą.
  6. Spustelėkite Sukurti.

Tai sukurs naują „.NET Core“ konsolės programos projektą „Visual Studio 2019“. Šį projektą naudosime tolesniuose šio straipsnio skyriuose.

Buferio klasės metodai .NET

Buferio klasėje yra šie metodai:

  • „BlockCopy“ (masyvas, Int32, masyvas, Int32) naudojamas šaltinio masyvui nukopijuoti iš nurodyto poslinkio į tikslinį masyvą nurodytame poslinkyje.
  • „ByteLength“ (masyvas) pateikia bendrą masyvo baitų skaičių, t. Y. Masyvo ilgį.
  • „GetByte“ (masyvas, „Int32“) naudojamas baitui nuskaityti nurodytoje masyvo vietoje.
  • „SetByte“ (masyvas, „Int32“, baitas) naudojamas nustatyti baitą tam tikroje masyvo vietoje.
  • „MemoryCopy“ („Void *“, „Void *“, „Int64“, „Int64“) ir „MemoryCopy“ („Void *“, „Void *“, „UInt64“, „UInt64“) naudojamos norint kopijuoti baitų skaičių iš atminties šaltinio adreso į kitą adresą.

Masyvų ir buferių naudojimas C #

Prieš pradėdami dirbti su „Buffer“ klase ir jos nariais, panagrinėkime „Array“ klasę, susijusią su sistemos vardų erdve. Masyvo klasėje yra metodas, pavadintas Copy (), kurį galima naudoti vieno masyvo turiniui nukopijuoti į kitą.

Sistemos vardų srities buferio klasėje yra metodas, pavadintas „BlockCopy“ (), kuris daro tą patį. Norėdami nukopijuoti šaltinio masyvo turinį į paskirties masyvą, galite naudoti „BlockCopy“ (). Reikėtų pažymėti, kad „Buffer.BlockCopy“ metodas yra daug greitesnis nei „Array.Copy“ metodas. Buferio klasėje taip pat yra kitų metodų, tokių kaip „ByteLength“, „GetByte“ ir „SetByte“.

Atminkite, kad „BlockCopy“ metodas nekopijuoja šaltinio masyvo elementų. Veikiau „BlockCopy“ nukopijuoja baitų seką iš šaltinio masyvo į paskirties masyvą.

Nukopijuokite baitus tarp dviejų masyvų C #

Galite pasinaudoti „Buffer.BlockCopy“ metodu, jei norite nukopijuoti baitus tarp šaltinio masyvo ir paskirties masyvo, kaip parodyta toliau pateiktame kodo fragmente.

statinis negaliojantis Pagrindinis ()

{

trumpas [] arr1 = naujas trumpas [] {1, 2, 3, 4, 5};

trumpas [] arr2 = naujas trumpas [10];

int sourceOffset = 0;

int paskirtisOffset = 0;

int skaičius = 2 * dydis (trumpas);

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

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

  {

Console.WriteLine (arr2 [i]);

  }

Pultas.ReadKey ();

}

Kai vykdote aukščiau nurodytą programą, štai kaip išvestis atrodys konsolės lange.

Raskite masyvo baito ilgį C #

Norėdami sužinoti masyvo ilgį, galite pasinaudoti buferio klasės „ByteLength“ metodu, kaip parodyta toliau pateiktame kodo pavyzdyje.

statinis negaliojantis Pagrindinis ()

{

trumpas [] arr1 = naujas trumpas [] {1, 2, 3, 4, 5};

trumpas [] arr2 = naujas trumpas [10];

Console.WriteLine ("arr1 ilgis yra: {0}",

Buferis. Baitų ilgis (arr1));

Console.WriteLine ("arr2 ilgis yra: {0}",

Buferis. Baitų ilgis (arr2));

Pultas.ReadKey ();

}

Kai paleisite aukščiau pateiktą programą, išvaizda atrodys taip:

Buferio klasės „SetByte“ ir „GetByte“ metodai gali būti naudojami atskiriems baitams nustatyti arba nuskaityti atitinkamai iš masyvo ir iš jo. Šis kodo fragmentas iliustruoja, kaip galima naudoti „SetByte“ ir „GetByte“ metodus.

statinis negaliojantis Pagrindinis ()

{

trumpas [] arr1 = {5, 25};

int ilgis = buferis. Baitų ilgis (arr1);

Console.WriteLine ("\ nPradinis masyvas yra toks: -");

už (int i = 0; i <ilgis; i ++)

{

baitas b = buferis. GetByte (arr1, i);

Console.WriteLine (b);

}

Buferis. SetByte (arr1, 0, 100);

Buferis. SetByte (arr1, 1, 100);

Console.WriteLine ("\ nPakeistas masyvas yra toks: -");

už (int i = 0; i <buferis. Baito ilgis (arr1); i ++)

{

baitas b = buferis. GetByte (arr1, i);

Console.WriteLine (b);

}

Pultas.ReadKey ();

}

Kai vykdote aukščiau nurodytą programą, štai kaip pasirodys išvestis.

Buferio klasė užtikrina daug geresnį našumą manipuliuojant atminties regionu, kuriame yra primityvių tipų. „Buffer“ klasės privalumais turėtumėte pasinaudoti visada, kai jums reikia manipuliuoti atmintyje esančiais duomenimis ir kai jums taip pat reikalinga greita prieiga prie atmintyje saugomų duomenų.

Kaip padaryti daugiau C #:

  • Kaip naudoti „HashSet“ C #
  • Kaip naudoti pavadintus ir pasirenkamus parametrus C #
  • Kaip palyginti C # kodą naudojant „BenchmarkDotNet“
  • Kaip naudoti sklandžias sąsajas ir metodų susiejimą C #
  • Kaip susieti statinius metodus C #
  • Kaip performuoti Dievo objektus C #
  • Kaip naudoti „ValueTask“ C #
  • Kaip naudoti nekintamumą C
  • Kaip naudoti const, readonly ir static C #
  • Kaip naudoti duomenų komentarus C #
  • Kaip dirbti su GU # C # 8
  • Kada naudoti abstrakčią klasę ir sąsają C #
  • Kaip dirbti su „AutoMapper“ C #
  • Kaip naudoti lambda išraiškas C #
  • Kaip dirbti su „Action“, „Func“ ir „Predicate“ delegatais C #
  • Kaip dirbti su delegatais C #
  • Kaip įdiegti paprastą kaupiklį C #
  • Kaip dirbti su atributais C #
  • Kaip dirbti su „Log4net“ C #
  • Kaip įgyvendinti saugyklos dizaino modelį C #
  • Kaip dirbti su atspindžiu C #
  • Kaip dirbti su failų stebėjimo programa C #
  • Kaip atlikti tingų inicializavimą C #
  • Kaip dirbti su MSMQ C #
  • Kaip dirbti su plėtinių metodais C #
  • Kaip mums lambda išraiškos C #
  • Kada naudoti nepastovų raktinį žodį C #
  • Kaip naudoti pajamingumo raktinį žodį C #
  • Kaip įgyvendinti polimorfizmą C #
  • Kaip sukurti savo užduočių planavimo priemonę C #
  • Kaip dirbti su „RabbitMQ“ C #
  • Kaip dirbti su dvigubu C #
  • Naršyti virtualius ir abstrakčius metodus C #
  • Kaip naudoti Dapper ORM C #
  • Kaip naudoti „flyweight“ dizaino modelį C #