Bagikan melalui


Memory2D<T> kelas

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 ke Memory2D<T> instance.
  • Array 3D T[,,], dengan instans Memory2D<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.