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>. Zie de richtlijnen voor geheugen-T-gebruik<> 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 volgen 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-segmenteringsbewerkingen rechtstreeks op de virtuele 2D-geheugenlocatie kunt uitvoeren, waarbij het Memory2D<T> exemplaar automatisch de benodigde parameters intern aanpast om de toewijzing aan de juiste geheugengebieden te verplaatsen die overeenkomen met het aangevraagde resultaat.
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);
// 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>
Het ReadOnlyMemory2D<T> type is tot het Memory2D<T> type wat ReadOnlyMemory<T> is tot 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. Zie de vorige alinea over het Memory2D<T> type voor meer informatie over hoe dit type werkt.
Voorbeelden
Meer voorbeelden vindt u in unit tests.
.NET Community Toolkit