Memory2D<T> sınıfı

Memory2D<T> türün işlevselliğini Memory<T> yansıtan bir türdür ve farkı 2B bellek konumlarını temsil etmek için kullanılabilir olmasıdır. Son derece esnektir ve ND dizileri (1B, 2B ve 3B diziler için açık destekle) veya Memory<T> örnekler dahil olmak üzere bir dizi farklı türü sarmalayabilme özelliğine sahiptir. Bu tür, Span2D<T> türüyle birlikte kullanılmak üzere tasarlanmıştır ve Memory<T>'in Span<T> ile birlikte kullanımıyla aynıdır. Bu iki türün temel farkları ve kullanım örneği senaryoları hakkında daha fazla bilgi için bkz . Bellek<T> kullanım yönergeleri.

Platform API'leri:Memory2D<T>, Span2D<T>, ReadOnlyMemory2D<T>

Nasıl çalışır?

Memory2D<T> türü, sarılmış nesneye, yükseklik ve genişlik parametrelerine ve özel bir pitch parametresine yapılan referans aracılığıyla eşlenmiş 2B bellek alanını dahili olarak izler. Yükseklik ve genişlik, 2B bellek alanındaki satır ve sütunların uzunluğunu belirtirken, aralık her satırın sonu ile aşağıdakinin başlangıcı arasındaki uzaklığı gösterir.

Bu yapılandırmayı gösteren basit bir diyagram aşağıdadır (kılavuzdaki "XX" hücreleri hedef 2B bellek alanına ait öğeleri temsil eder):

//                _____________________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__/
// ...________/

Bu yapılandırma, var olan arabellekleri 2B bellek alanlarına eşleme yönteminde son derece esnek olmasını sağlar Memory2D<T> , bu nedenle bitişik olmayan arabellekleri "sanal" bir 2B bellek konumu olarak temsil etmek de mümkündür. Aşağıda, bir Memory2D örneğinin eşleyebileceği arabellek türlerine birkaç örnek verilmiştir:

  • Satır öncelikli sırayla 2D bellek alanı olarak eşlenmiş bir 1D T[] dizi.
  • Örneğe doğrudan eşlenmiş bir 2B T[,] dizi Memory2D<T>.
  • Belirli bir derinlik dilimini (katman) temsil eden bir T[,,] örneği olan bir 3B Memory2D<T> dizi.

Türü Memory2D<T> , standart Memory<T> uygulamanın uyguladığı API yüzeyinin çoğu da dahil olmak üzere bir dizi yardımcı program yöntemini de kullanıma sunar. Örneğin, 2B dilimleme işlemlerini doğrudan sanal 2B bellek konumunda yapmayı kolaylaştıran bir Slice(int, int) yöntem içerir ve örnek, Memory2D<T> eşlemesini istenen sonuca karşılık gelen doğru bellek alanlarına kaydırmak için gerekli parametreleri dahili olarak otomatik olarak ayarlar.

Sözdizimi

2D diziden bir Memory2D<T> örneğini şu şekilde oluşturabilirsiniz:

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>

ReadOnlyMemory2D<T> türü, Memory2D<T> türüne ne ise, ReadOnlyMemory<T> de Memory<T>'e odur. Tam olarak aynı işlevleri (sarmalanan bellek alanının içeriğini değiştirmeyi içeren API'ler hariç) kullanıma sunar ve rastgele 2B bellek konumlarına salt okunur bir görünüm sağlar. Bu türün nasıl çalıştığı hakkında daha fazla bilgi için, Memory2D<T> türü hakkındaki önceki paragrafa bakın.

Örnekler

Birim testlerinde daha fazla örnek bulabilirsiniz.