Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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, türüyle birlikte, ile Span2D<T>Memory<T>birlikte kullanılanla aynı şekilde Span<T> kullanılması amaçlanır. Bu iki türün temel farkları ve kullanım örneği senaryoları hakkında daha fazla bilgi için bu belgeler sayfasını okuyabilirsiniz.
Platform API'leri:
Memory2D<T>,Span2D<T>,ReadOnlyMemory2D<T>
Nasıl çalışır?
Türü, Memory2D<T> sarmalanan nesneye, yükseklik ve genişlik parametrelerine ve özel bir pitch parametresine yapılan başvuru 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. Örneğin, bir örneğin eşleyebileceği Memory2D arabellek türlerine birkaç örnek aşağıda verilmiştir:
- Satır ana sırasına göre 2B bellek alanı olarak eşlenen bir 1B
T[]dizi. - Doğrudan bir örneğe eşlenmiş bir
T[,]2BMemory2D<T>dizi. - Belirli bir derinlik dilimini (katman) temsil eden bir
T[,,]örneği olan bir 3BMemory2D<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
2B diziden bir örneği şu şekilde oluşturabilirsiniz Memory2D<T> :
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>
ReadOnlyMemory2D<T>, Memory2D<T> için olan ReadOnlyMemory<T> türüne yapılırMemory<T>. 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 yukarıdaki türdeki paragrafa Memory2D<T> başvurabilirsiniz.
Örnekler
.NET Community Toolkit