Cara menggunakan kelas Buffer di C #

Buffer adalah urutan byte dalam memori dan buffering adalah manipulasi data yang berada di memori. Dalam. NET buffering mengacu pada manipulasi memori yang tidak dikelola, yang direpresentasikan sebagai array byte. 

Anda mungkin ingin memanfaatkan kelas System.Buffer di .NET kapan pun Anda perlu menulis data ke memori secara langsung atau kapan pun Anda ingin memanipulasi data yang disimpan dalam memori yang tidak dikelola. Artikel ini berbicara tentang bagaimana kita dapat bekerja dengan kelas Buffer di C #. 

Untuk bekerja dengan contoh kode yang disediakan dalam artikel ini, Anda harus menginstal Visual Studio 2019 di sistem Anda. Jika Anda belum memiliki salinannya, Anda dapat mengunduh Visual Studio 2019 di sini.

Buat proyek aplikasi konsol inti .NET di Visual Studio .NET

Pertama, mari buat proyek aplikasi konsol .NET Core di Visual Studio. Dengan asumsi Visual Studio 2019 diinstal di sistem Anda, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek aplikasi konsol .NET Core baru di Visual Studio.

  1. Luncurkan Visual Studio IDE.
  2. Klik "Buat proyek baru".
  3. Di jendela "Buat proyek baru", pilih "Aplikasi Konsol (.NET Core)" dari daftar template yang ditampilkan.
  4. Klik Next.
  5. Di jendela "Configure your new project" yang ditampilkan berikutnya, tentukan nama dan lokasi untuk proyek baru tersebut.
  6. Klik Buat.

Ini akan membuat proyek aplikasi konsol .NET Core baru di Visual Studio 2019. Kami akan menggunakan proyek ini di bagian selanjutnya dari artikel ini.

Metode kelas Buffer di .NET

Kelas Buffer berisi metode berikut:

  • BlockCopy (Array, Int32, Array, Int32) digunakan untuk menyalin larik sumber dari offset yang ditentukan ke larik target pada offset yang ditentukan.
  • ByteLength (Array) mengembalikan jumlah total byte dalam array, yaitu panjang array.
  • GetByte (Array, Int32) digunakan untuk mengambil byte di lokasi yang ditentukan dalam array.
  • SetByte (Array, Int32, Byte) digunakan untuk mengatur byte di lokasi tertentu dalam array.
  • MemoryCopy (Void *, Void *, Int64, Int64) dan MemoryCopy (Void *, Void *, UInt64, UInt64) digunakan untuk menyalin sejumlah byte dari alamat sumber dalam memori ke alamat lain.

Menggunakan array dan buffer di C #

Sebelum kita mulai bekerja dengan kelas Buffer dan anggotanya, mari jelajahi kelas Array yang berkaitan dengan namespace Sistem. Kelas Array berisi metode bernama Copy () yang dapat digunakan untuk menyalin konten dari satu array ke array lainnya.

Kelas Buffer di namespace Sistem berisi metode bernama BlockCopy () yang melakukan hal yang sama. Anda bisa menggunakan BlockCopy () untuk menyalin konten larik sumber ke larik tujuan. Perlu dicatat bahwa metode Buffer.BlockCopy jauh lebih cepat daripada metode Array.Copy. Kelas Buffer juga berisi metode lain seperti ByteLength, GetByte, dan SetByte.

Perhatikan bahwa metode BlockCopy tidak menyalin elemen dari larik sumber. Sebaliknya, BlockCopy menyalin urutan byte dari larik sumber ke larik tujuan.

Salin byte antara dua array di C #

Anda dapat memanfaatkan metode Buffer.BlockCopy untuk menyalin byte antara larik sumber dan larik tujuan — seperti yang ditunjukkan dalam cuplikan kode yang diberikan di bawah ini.

kekosongan statis Utama ()

{

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

  pendek [] arr2 = pendek baru [10];

  int sourceOffset = 0;

  int destinationOffset = 0;

  int count = 2 * sizeof (pendek);

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

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

  {

      Console.WriteLine (arr2 [i]);

  }

  Console.ReadKey ();

}

Saat Anda menjalankan program di atas, berikut tampilan output di jendela konsol.

Temukan panjang byte dari sebuah array di C #

Untuk mengetahui panjang array Anda dapat memanfaatkan metode ByteLength dari kelas Buffer seperti yang ditunjukkan pada contoh kode yang diberikan di bawah ini.

kekosongan statis Utama ()

{

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

  pendek [] arr2 = pendek baru [10];

  Console.WriteLine ("Panjang arr1 adalah: {0}",

  Buffer.ByteLength (arr1));

  Console.WriteLine ("Panjang arr2 adalah: {0}",

  Buffer.ByteLength (arr2));

  Console.ReadKey ();

}

Saat Anda menjalankan program di atas, berikut tampilan hasilnya:

Metode SetByte dan GetByte dari kelas Buffer dapat digunakan untuk mengatur atau membaca byte individu ke dan dari array. Snipet kode berikut menggambarkan bagaimana metode SetByte dan GetByte dapat digunakan.

kekosongan statis Utama ()

{

pendek [] arr1 = {5, 25};

int length = Buffer.ByteLength (arr1);

Console.WriteLine ("\ nArray aslinya adalah sebagai berikut: -");

untuk (int i = 0; i <length; i ++)

{

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

      Console.WriteLine (b);

}

Buffer.SetByte (arr1, 0, 100);

Buffer.SetByte (arr1, 1, 100);

Console.WriteLine ("\ nLarik yang diubah adalah sebagai berikut: -");

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

{

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

      Console.WriteLine (b);

}

    Console.ReadKey ();

}

Saat Anda menjalankan program di atas, berikut tampilan keluarannya.

Kelas Buffer memberikan performa yang jauh lebih baik saat memanipulasi wilayah memori yang berisi tipe primitif. Anda harus memanfaatkan kelas Buffer kapan pun Anda perlu memanipulasi data dalam memori dan kapan pun Anda membutuhkan akses cepat ke data yang disimpan dalam memori juga.

Bagaimana melakukan lebih banyak di C #:

  • Cara menggunakan HashSet di C #
  • Cara menggunakan parameter bernama dan opsional di C #
  • Cara benchmark kode C # menggunakan BenchmarkDotNet
  • Cara menggunakan antarmuka yang lancar dan rangkaian metode di C #
  • Cara menguji unit metode statis di C #
  • Cara refactor objek Tuhan di C #
  • Cara menggunakan ValueTask di C #
  • Cara menggunakan kekekalan di C
  • Cara menggunakan const, readonly, dan static di C #
  • Cara menggunakan anotasi data di C #
  • Cara bekerja dengan GUID di C # 8
  • Kapan menggunakan kelas abstrak vs. antarmuka di C #
  • Bagaimana bekerja dengan AutoMapper di C #
  • Cara menggunakan ekspresi lambda di C #
  • Cara bekerja dengan delegasi Action, Func, dan Predicate di C #
  • Bagaimana bekerja dengan delegasi di C #
  • Bagaimana menerapkan logger sederhana di C #
  • Bagaimana bekerja dengan atribut di C #
  • Bagaimana bekerja dengan log4net di C #
  • Bagaimana menerapkan pola desain repositori di C #
  • Bagaimana bekerja dengan refleksi di C #
  • Bagaimana bekerja dengan filesystemwatcher di C #
  • Bagaimana melakukan inisialisasi malas di C #
  • Bagaimana bekerja dengan MSMQ di C #
  • Bagaimana bekerja dengan metode ekstensi di C #
  • Bagaimana kami ekspresi lambda di C #
  • Kapan menggunakan kata kunci volatile di C #
  • Cara menggunakan kata kunci hasil di C #
  • Bagaimana menerapkan polimorfisme di C #
  • Cara membuat penjadwal tugas Anda sendiri di C #
  • Bagaimana bekerja dengan RabbitMQ di C #
  • Bagaimana bekerja dengan tupel di C #
  • Menjelajahi metode virtual dan abstrak di C #
  • Cara menggunakan Dapper ORM di C #
  • Cara menggunakan pola desain kelas terbang di C #