Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Memory2D<T> adalah jenis yang mencerminkan fungsionalitas jenis Memory<T> , dengan perbedaan yang dapat digunakan untuk mewakili lokasi memori 2D. Ini sangat fleksibel dan mampu membungkus sejumlah jenis yang berbeda, termasuk array ND (dengan dukungan eksplisit untuk array 1D, 2D, dan 3D) atau Memory<T> instans. Jenis ini dimaksudkan untuk digunakan bersama dengan jenis , dengan Span2D<T> cara yang sama yang Memory<T> digunakan bersama dengan Span<T>. Untuk informasi selengkapnya tentang perbedaan utama dan skenario kasus penggunaan dari kedua jenis ini, Anda dapat membaca halaman dokumen ini.
API Platform:
Memory2D<T>,Span2D<T>,ReadOnlyMemory2D<T>
Cara kerjanya
Jenis ini Memory2D<T> secara internal melacak area memori 2D yang dipetakan melalui referensi ke objek yang dibungkus, parameter tinggi dan lebar, dan parameter nada khusus. Tinggi dan lebar menunjukkan panjang baris dan kolom di area memori 2D, sementara nada menunjukkan offset antara akhir setiap baris dan awal baris berikut.
Berikut adalah diagram sederhana yang mengilustrasikan konfigurasi ini (sel "XX" di kisi mewakili item milik area memori 2D target):
// _____________________stride_____...
// reference__ /________width_________ ________...
// \/ \/
// | -- | -- | |- | -- | -- | -- | -- | -- | -- | -- |_
// | -- | -- | XX | XX | XX | XX | XX | XX | -- | -- | |
// | -- | -- | XX | XX | XX | XX | XX | XX | -- | -- | |
// | -- | -- | XX | XX | XX | XX | XX | XX | -- | -- | |_height
// | -- | -- | XX | XX | XX | XX | XX | XX | -- | -- |_|
// | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- |
// | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- |
// ...__pitch__/
// ...________/
Konfigurasi ini memungkinkan Memory2D<T> untuk sangat fleksibel dalam cara memetakan buffer yang ada ke area memori 2D, karena memungkinkan untuk juga mewakili buffer yang tidak disarankan sebagai lokasi memori 2D "virtual". Misalnya, berikut adalah beberapa contoh jenis buffer yang dapat dipetakan Memory2D instans ke:
- Array 1D
T[]yang dipetakan sebagai area memori 2D dalam urutan besar baris. - Array 2D
T[,], dipetakan langsung keMemory2D<T>instans. - Array 3D
T[,,], dengan instans yangMemory2D<T>mewakili ikatan kedalaman tertentu (lapisan).
Jenis ini Memory2D<T> juga mengekspos sejumlah metode utilitas, termasuk sebagian besar permukaan API yang sama dengan yang diterapkan standar Memory<T> . Misalnya, ini mencakup Slice(int, int) metode yang memudahkan untuk melakukan operasi pemotongan 2D langsung pada lokasi memori 2D virtual, dengan Memory2D<T> instans secara otomatis menyesuaikan parameter yang diperlukan secara internal untuk mengalihkan pemetaannya pada area memori yang tepat yang sesuai dengan hasil yang diminta.
Sintaks
Berikut cara membuat Memory2D<T> instans dari array 2D:
int[,] array =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Memory2D<int> memory = array;
// The memory directly maps the 2*3 array here
Memory2D<int> slice = memory.Slice(0, 1, 2, 2);
// We create a slice from row 0 and column 1, of size 2*2
int[,] copy = slice.ToArray();
// { 2, 3 }
// { 5, 6 }
// If on a supported runtime, we can also slice using a range
Memory2D<int> test = memory[.., ..2];
// { 1, 2 }
// { 4, 5 }
// { 7, 8 }
Span2D<int> span = memory.Span;
// We can use the span to perform operations on the underlying
// data for the memory instance. All the available APIs are
// documented in the docs about the Span2D<T> type.
ReadOnlyMemory2D<T>
adalah ReadOnlyMemory2D<T> untuk Memory2D<T> jenis apa yang ReadOnlyMemory<T> harus Memory<T>. Ini mengekspos fungsionalitas yang sama persis (dikurangi API yang melibatkan modifikasi konten area memori yang dibungkus) dan menyediakan tampilan baca-saja ke lokasi memori 2D arbitrer. Untuk informasi selengkapnya tentang cara kerja jenis ini, Anda dapat merujuk ke paragraf pada jenis di Memory2D<T> atas.
Contoh
Anda dapat menemukan lebih banyak contoh dalam pengujian unit.
.NET Community Toolkit