Programmēšana

Kā izmantot bufera klasi C #

Buferis ir baitu secība atmiņā, un buferizācija ir manipulācija ar atmiņā esošajiem datiem. In .NET buferizācija attiecas uz manipulācijām ar nepārvaldīto atmiņu, kas tiek attēlota kā baitu masīvs.

Iespējams, vēlēsities izmantot .NET klases System.Buffer priekšrocības ikreiz, kad nepieciešams tieši ierakstīt datus atmiņā vai kad vēlaties manipulēt ar nepārvaldītā atmiņā saglabātiem datiem. Šis raksts runā par to, kā mēs varam strādāt ar bufera klasi C #.

Lai strādātu ar šajā rakstā sniegtajiem kodu piemēriem, sistēmā jābūt instalētai Visual Studio 2019. Ja jums vēl nav kopijas, varat lejupielādēt Visual Studio 2019 šeit.

Visual Studio izveidojiet .NET Core konsoles lietojumprogrammas projektu

Vispirms izveidosim .NET Core konsoles lietojumprogrammas projektu Visual Studio. Pieņemot, ka Visual Studio 2019 ir instalēta jūsu sistēmā, veiciet tālāk norādītās darbības, lai Visual Studio izveidotu jaunu .NET Core konsoles lietojumprogrammas projektu.

  1. Palaidiet Visual Studio IDE.
  2. Noklikšķiniet uz “Izveidot jaunu projektu”.
  3. Logā “Izveidot jaunu projektu” parādīto veidņu sarakstā atlasiet “Console App (.NET Core)”.
  4. Noklikšķiniet uz Tālāk.
  5. Nākamajā logā “Konfigurēt jauno projektu” norādiet jaunā projekta nosaukumu un vietu.
  6. Noklikšķiniet uz Izveidot.

Tādējādi Visual Studio 2019 tiks izveidots jauns .NET Core konsoles lietojumprogrammas projekts. Mēs izmantosim šo projektu šī raksta nākamajās sadaļās.

Bufera klases metodes .NET

Bufera klasē ir šādas metodes:

  • BlockCopy (masīvs, Int32, masīvs, Int32) tiek izmantots, lai kopētu avota masīvu no norādītā nobīdes uz mērķa masīvu noteiktā nobīdē.
  • ByteLength (masīvs) atgriež kopējo baitu skaitu masīvā, t.i., masīva garumu.
  • GetByte (masīvs, Int32) tiek izmantots, lai izgūtu baitu noteiktā masīva vietā.
  • SetByte (masīvs, Int32, baits) tiek izmantots, lai iestatītu baitu noteiktā masīva vietā.
  • MemoryCopy (Void *, Void *, Int64, Int64) un MemoryCopy (Void *, Void *, UInt64, UInt64) tiek izmantoti, lai kopētu baitu skaitu no atmiņas avota adreses uz citu adresi.

Masīvu un buferu izmantošana C #

Pirms sākam strādāt ar bufera klasi un tās dalībniekiem, izpētīsim klāstu Array, kas attiecas uz sistēmas nosaukumvietu. Masīva klasē ir metode ar nosaukumu Copy (), kuru var izmantot, lai kopētu viena masīva saturu uz citu.

Sistēmas nosaukumvietas Buffer klasē ir metode ar nosaukumu BlockCopy (), kas dara to pašu. Jūs varat izmantot BlockCopy (), lai kopētu avota masīva saturu uz galamērķa masīvu. Jāatzīmē, ka Buffer.BlockCopy metode ir daudz ātrāka nekā Array.Copy metode. Bufera klasē ir arī citas metodes, piemēram, ByteLength, GetByte un SetByte.

Ņemiet vērā, ka metode BlockCopy nekopē avota masīva elementus. Drīzāk BlockCopy kopē baitu secību no avota masīva uz galamērķa masīvu.

Kopēt baitus starp diviem masīviem C #

Jūs varat izmantot Buffer.BlockCopy metodi, lai kopētu baitus starp avota masīvu un galamērķa masīvu - kā parādīts tālāk sniegtajā koda fragmentā.

static void Main ()

{

īss [] arr1 = jauns īss [] {1, 2, 3, 4, 5};

īss [] arr2 = jauns īss [10];

int avotsOffset = 0;

int galamērķisOffset = 0;

int skaits = 2 * izmērs (īss);

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

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

  {

Console.WriteLine (arr2 [i]);

  }

Console.ReadKey ();

}

Veicot iepriekš minēto programmu, lūk, kā izvade izskatās konsoles logā.

Atrodiet masīva baitu garumu C #

Lai uzzinātu masīva garumu, varat izmantot bufera klases ByteLength metodi, kā parādīts tālāk sniegtajā kodu piemērā.

static void Main ()

{

īss [] arr1 = jauns īss [] {1, 2, 3, 4, 5};

īss [] arr2 = jauns īss [10];

Console.WriteLine ("arr1 garums ir: {0}",

Buferis.ByteLength (arr1));

Console.WriteLine ("arr2 garums ir: {0}",

Buferis.ByteLength (arr2));

Console.ReadKey ();

}

Palaižot iepriekš minēto programmu, izeja izskatās šādi:

Bufera klases SetByte un GetByte metodes var izmantot, lai iestatītu vai nolasītu atsevišķus baitus attiecīgi masīvā un no masīva. Šis koda fragments parāda, kā var izmantot SetByte un GetByte metodes.

static void Main ()

{

īss [] arr1 = {5, 25};

int garums = Buffer.ByteLength (arr1);

Console.WriteLine ("\ nSākotnējais masīvs ir šāds: -");

par (int i = 0; i <garums; i ++)

{

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

Console.WriteLine (b);

}

Buferis. SetByte (arr1, 0, 100);

Buferis. SetByte (arr1, 1, 100);

Console.WriteLine ("\ nModificētais masīvs ir šāds: -");

par (int i = 0; i <buferis. Baitu garums (arr1); i ++)

{

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

Console.WriteLine (b);

}

Console.ReadKey ();

}

Veicot iepriekš minēto programmu, izeja parādīsies šādi.

Bufera klase nodrošina daudz labāku sniegumu, manipulējot ar atmiņas reģionu, kurā ir primitīvi tipi. Jums vajadzētu izmantot bufera klases priekšrocības ikreiz, kad jums ir nepieciešams manipulēt ar atmiņā esošajiem datiem un kad jums nepieciešama ātra piekļuve arī atmiņā saglabātajiem datiem.

Kā izdarīt vairāk C #:

  • Kā lietot HashSet C #
  • Kā izmantot nosauktos un izvēles parametrus C #
  • Kā salīdzināt C # kodu, izmantojot BenchmarkDotNet
  • Kā izmantot tekošas saskarnes un metodes saistīt ar C #
  • Kā testēt statiskās metodes C #
  • Kā pārveidot Dieva objektus C #
  • Kā izmantot ValueTask C #
  • Kā izmantot nemainīgumu C
  • Kā lietot const, tikai lasāmu un statisku C #
  • Kā izmantot datu anotācijas C #
  • Kā strādāt ar GUID C # 8
  • Kad izmantot abstraktu klasi un saskarni C #
  • Kā strādāt ar AutoMapper C #
  • Kā lietot lambda izteicienus C #
  • Kā strādāt ar Action, Func un Predicate delegātiem C #
  • Kā strādāt ar delegātiem C #
  • Kā ieviest vienkāršu reģistrētāju C #
  • Kā strādāt ar atribūtiem C #
  • Kā strādāt ar log4net C #
  • Kā ieviest krātuves dizaina modeli C #
  • Kā strādāt ar refleksiju C #
  • Kā strādāt ar filesystemwatcher C #
  • Kā veikt slinku inicializāciju C #
  • Kā strādāt ar MSMQ C #
  • Kā strādāt ar paplašināšanas metodēm C #
  • Kā mums izteikt lambda izteicienus C #
  • Kad lietot svārstīgo atslēgvārdu C #
  • Kā izmantot ienesīguma atslēgvārdu C #
  • Kā ieviest polimorfismu C #
  • Kā izveidot savu uzdevumu plānotāju C #
  • Kā strādāt ar RabbitMQ C #
  • Kā strādāt ar dubultošanos C #
  • Virtuālu un abstraktu metožu izpēte C #
  • Kā lietot Dapper ORM C #
  • Kā izmantot lidojošā dizaina rakstu C #
$config[zx-auto] not found$config[zx-overlay] not found