Jenis terkait memori dan span
Mulai .NET Core 2.1, .NET mencakup sejumlah jenis yang saling terkait yang mewakili wilayah memori arbitrer yang bersebelahan dan jenisnya sangat kuat. Ini termasuk:
System.Span<T>, yaitu jenis yang digunakan untuk mengakses wilayah memori yang bersebelahan. Instans Span<T> dapat didukung oleh array jenis
T
, String, buffer yang dialokasikan dengan stackalloc, atau penunjuk ke memori yang tidak dikelola. Instans tersebut memiliki sejumlah batasan karena harus dialokasikan pada tumpukan. Misalnya, suatu bidang di kelas tidak boleh berjenis Span<T>, dan span tidak dapat digunakan dalam operasi asinkron.System.ReadOnlySpan<T>, yaitu versi struktur Span<T> yang tidak dapat diubah.
System.Memory<T>, yang merupakan pembungkus di atas wilayah memori yang bersebelahan. Instans Memory<T> dapat didukung oleh array jenis
T
, atau String, atau manajer memori. Karena instans tersebut dapat disimpan di tumpukan terkelola, Memory<T> tidak memiliki batasan Span<T>.System.ReadOnlyMemory<T>, yaitu versi struktur Memory<T> yang tidak dapat diubah.
System.Buffers.MemoryPool<T>, yang mengalokasikan blok memori yang jenisnya kuat dari kumpulan memori ke pemilik. Instans IMemoryOwner<T> dapat disewa dari kumpulan dengan memanggil MemoryPool<T>.Rent dan dirilis kembali ke kumpulan dengan memanggil MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, yang merupakan pemilik blok memori dan mengontrol manajemen selama masa pakainya.
MemoryManager<T>, yakni kelas dasar abstrak yang dapat digunakan untuk menggantikan implementasi Memory<T>, sehingga Memory<T> dapat didukung oleh jenis tambahan, seperti handel yang aman. MemoryManager<T> ditujukan untuk skenario tingkat lanjut.
ArraySegment<T>, yaitu pembungkus untuk sejumlah elemen array tertentu yang dimulai pada indeks tertentu.
System.MemoryExtensions, yang merupakan kumpulan metode ekstensi untuk mengonversi string, array, dan segmen array menjadi blok Memory<T>.
System.Span<T>, System.Memory<T>, dan pembanding baca-sajanya dirancang untuk mengizinkan pembuatan algoritma yang menghindari penyalinan memori atau mengalokasikan pada tumpukan terkelola melebihi jumlah yang diperlukan. Membuatnya (baik melalui Slice
atau konstruktornya) tidak melibatkan tindakan duplikat buffer yang mendasar: hanya referensi serta offset yang relevan, yang mewakili "tampilan" memori yang dibungkus saja yang diperbarui.
Catatan
Untuk kerangka kerja sebelumnya, Span<T> dan Memory<T> tersedia dalam paket System.Memory NuGet.
Untuk informasi lebih lanjut, lihat namespace layanan System.Buffers.
Menggunakan memori dan span
Karena jenis terkait memori dan span biasanya digunakan untuk menyimpan data dalam alur pemrosesan, penting bagi pengembang untuk mengikuti serangkaian praktik terbaik saat menggunakan Span<T>, Memory<T>, serta jenis yang terkait. Praktik terbaik ini didokumentasikan dalam panduan penggunaan Memori<T> dan Span<T>.