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 Span2D<T>, dengan cara yang sama seperti Memory<T> digunakan bersama dengan Span<T>. Untuk informasi selengkapnya tentang perbedaan utama dan skenario kasus penggunaan kedua jenis ini, lihat Panduan penggunaan T< Memori>.
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 juga untuk mewakili buffer tidak bersebelahan sebagai lokasi memori 2D "virtual". Berikut adalah beberapa contoh jenis buffer yang dapat dipetakan oleh sebuah instance Memory2D:
- Array 1D
T[]yang dipetakan sebagai area memori 2D dalam urutan besar baris. - Array 2D
T[,], dipetakan langsung keMemory2D<T>instance. - Array 3D
T[,,], dengan instansMemory2D<T>yang mewakili iris kedalaman tertentu (lapisan).
Jenis Memory2D<T> ini juga mengekspos sejumlah metode utilitas, termasuk sebagian besar permukaan API yang diimplementasikan secara standar oleh Memory<T>. Misalnya, ini mencakup metode Slice(int, int) yang memudahkan untuk melakukan operasi pemotongan 2D langsung pada lokasi memori 2D virtual, di mana instance Memory2D<T> secara otomatis menyesuaikan parameter yang diperlukan secara internal untuk mengalihkan pemetaannya ke area memori yang tepat sesuai dengan hasil yang diminta.
Sintaks
Berikut cara membuat Memory2D<T> instance 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);
// 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, you can also slice using a range:
Memory2D<int> test = memory[.., ..2];
// { 1, 2 }
// { 4, 5 }
// { 7, 8 }
Span2D<int> span = memory.Span;
// You 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>
Jenis ReadOnlyMemory2D<T> adalah untuk jenis Memory2D<T> seperti ReadOnlyMemory<T> untuk 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, lihat paragraf sebelumnya tentang jenisnya Memory2D<T> .
Contoh
Anda dapat menemukan lebih banyak contoh dalam pengujian unit.
.NET Community Toolkit