Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het Memory2D<T>
is een type dat de functionaliteit van het Memory<T>
type weerspiegelt, met het verschil dat het kan worden gebruikt om 2D-geheugenlocaties weer te geven. Het is uiterst flexibel en kan een aantal verschillende typen verpakken, waaronder ND-matrices (met expliciete ondersteuning voor 1D-, 2D- en 3D-matrices) of Memory<T>
exemplaren. Dit type is bedoeld om samen met het Span2D<T>
type te worden gebruikt, op dezelfde manier als die Memory<T>
wordt gebruikt samen met Span<T>
. Lees deze docs-pagina voor meer informatie over de belangrijkste verschillen en use-casescenario's van deze twee typen.
Platform-API's:
Memory2D<T>
, ,Span2D<T>
ReadOnlyMemory2D<T>
Hoe het werkt
Het Memory2D<T>
type houdt intern het in kaart gebrachte 2D-geheugengebied bij via een verwijzing naar het omwikkelde object, de hoogte- en breedteparameters en een specifieke pitch-parameter. De hoogte en breedte geven de lengte van de rijen en kolommen in het 2D-geheugengebied aan, terwijl de pitch de verschuiving aangeeft tussen het einde van elke rij en het begin van de volgende.
Hier volgt een eenvoudig diagram dat deze configuratie illustreert (de 'XX'-cellen in het raster vertegenwoordigen items die behoren tot het doelgeheugengebied 2D):
// _____________________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__/
// ...________/
Deze configuratie maakt het Memory2D<T>
mogelijk om zeer flexibel te zijn in de manier waarop bestaande buffers worden toegewezen aan 2D-geheugengebieden, omdat het mogelijk maakt om ook discontiguous buffers weer te geven als een 'virtuele' 2D-geheugenlocatie. Hier zijn enkele voorbeelden van buffertypen waaraan een Memory2D
exemplaar kan worden toegewezen:
- Een 1D-matrix
T[]
die is toegewezen als een 2D-geheugengebied in rij-primaire volgorde. - Een 2D-array
T[,]
die rechtstreeks gekoppeld is aan eenMemory2D<T>
exemplaar. - Een 3D-matrix
T[,,]
, met eenMemory2D<T>
exemplaar dat een bepaald dieptesegment (een laag) vertegenwoordigt.
Het Memory2D<T>
type bevat ook een aantal hulpmethoden, waaronder het grootste deel van dezelfde API-interface die door het standaard Memory<T>
wordt geïmplementeerd. Het bevat bijvoorbeeld een Slice(int, int)
methode waarmee u eenvoudig 2D-segmentbewerkingen rechtstreeks op de locatie van het virtuele 2D-geheugen kunt uitvoeren, waarbij het Memory2D<T>
exemplaar automatisch de benodigde parameters intern aanpast om de toewijzing aan de juiste geheugengebied(en) die overeenkomt met het aangevraagde resultaat te verplaatsen.
Syntaxis
U kunt als volgt een Memory2D<T>
exemplaar maken op basis van een 2D-matrix:
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>
Het ReadOnlyMemory2D<T>
is bij het Memory2D<T>
type wat ReadOnlyMemory<T>
is bij Memory<T>
. Het biedt dezelfde exacte functionaliteiten (min de API's die betrekking hebben op het wijzigen van de inhoud van het verpakte geheugengebied) en biedt een alleen-lezenweergave voor willekeurige 2D-geheugenlocaties. Voor meer informatie over hoe dit type werkt, kunt u verwijzen naar de alinea van het Memory2D<T>
bovenstaande type.
Voorbeelden
Meer voorbeelden vindt u in unit tests.
.NET Community Toolkit