Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Memory2D<T>
är en typ som speglar funktionen för Memory<T>
typen, med skillnaden att den kan användas för att representera 2D-minnesplatser. Den är extremt flexibel och kan omsluta ett antal olika typer, inklusive ND-matriser (med uttryckligt stöd för 1D-, 2D- och 3D-matriser) eller Memory<T>
instanser. Den här typen är avsedd att användas tillsammans med Span2D<T>
typen på samma sätt som Memory<T>
används tillsammans med Span<T>
. Mer information om de viktigaste skillnaderna och användningsfallen för dessa två typer finns på den här dokumentsidan.
Plattforms-API:er:
Memory2D<T>
,Span2D<T>
,ReadOnlyMemory2D<T>
Så här fungerar det
Typen Memory2D<T>
spårar internt det mappade 2D-minnesområdet genom en referens till det omslutna objektet, parametrarna för höjd och bredd och en speciell tonhöjdsparameter. Höjden och bredden anger längden på raderna och kolumnerna i 2D-minnesområdet, medan tonhöjden anger förskjutningen mellan slutet av varje rad och början av följande.
Här är ett enkelt diagram som illustrerar den här konfigurationen ("XX"-cellerna i rutnätet representerar objekt som tillhör mål-2D-minnesområdet):
// _____________________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__/
// ...________/
Den här konfigurationen gör det möjligt Memory2D<T>
att vara extremt flexibel på det sätt som den mappar befintliga buffertar till 2D-minnesområden, eftersom det gör det möjligt att också representera osammanhängande buffertar som en "virtuell" 2D-minnesplats. Här är till exempel några exempel på bufferttyper som en Memory2D
instans kan mappa till:
- En 1D-matris
T[]
som mappas som ett 2D-minnesområde i radmajorordning. - En 2D-matris
T[,]
som mappas direkt till enMemory2D<T>
instans. - En 3D-matris
T[,,]
med enMemory2D<T>
instans som representerar en viss djupsektor (ett lager).
Typen Memory2D<T>
exponerar också ett antal verktygsmetoder, inklusive de flesta av samma API-yta som standarden Memory<T>
implementerar. Den innehåller till exempel en Slice(int, int)
metod som gör det enkelt att utföra 2D-segmenteringsåtgärder direkt på den virtuella 2D-minnesplatsen, där instansen Memory2D<T>
automatiskt justerar de parametrar som krävs internt för att flytta mappningen på rätt minnesyta som motsvarar det begärda resultatet.
Syntax
Så här kan du skapa en Memory2D<T>
instans från en 2D-matris:
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>
är för Memory2D<T>
typen vad ReadOnlyMemory<T>
är för Memory<T>
. Den exponerar samma exakta funktioner (minus API:erna som innebär att innehållet i det omslutna minnesområdet ändras) och ger en skrivskyddad vy till godtyckliga 2D-minnesplatser. Mer information om hur den här typen fungerar finns i stycket om Memory2D<T>
-typen ovan.
Exempel
.NET Community Toolkit