Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez Memory2D<T>
egy olyan típus, amely tükrözi a Memory<T>
típus funkcióit, azzal a különbséggel, hogy 2D memóriahelyek ábrázolására használható. Rendkívül rugalmas, és számos különböző típust képes burkolni, beleértve az ND tömböket (1D, 2D és 3D tömbök explicit támogatásával) vagy Memory<T>
példányokat. Ezt a típust a Span2D<T>
típussal együtt kell használni, ugyanúgy, mint ahogyan a Memory<T>
a Span<T>
típussal van használva. A két típus főbb különbségeit és használati esetforgatókönyveit ez a dokumentumoldal olvassa el.
Platform API-k:
Memory2D<T>
,Span2D<T>
,ReadOnlyMemory2D<T>
Hogyan működik?
A Memory2D<T>
típus belsőleg nyomon követi a leképezett 2D memóriaterületet a burkolt objektumra, a magassági és szélességi paraméterekre, valamint egy speciális hangmagasság-paraméterre mutató hivatkozáson keresztül. A magasság és a szélesség a 2D memóriaterület sorainak és oszlopainak hosszát jelzi, míg a hangmagasság az egyes sorok vége és a következő kezdet közötti eltolást jelzi.
Íme egy egyszerű diagram, amely szemlélteti ezt a konfigurációt (a rács "XX" cellái a cél 2D memóriaterülethez tartozó elemeket jelölik):
// _____________________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__/
// ...________/
Ez a konfiguráció lehetővé teszi Memory2D<T>
, hogy rendkívül rugalmas legyen a meglévő pufferek 2D memóriaterületekre való leképezése során, mivel lehetővé teszi az elégedetlen pufferek "virtuális" 2D memóriahelyként való megjelenítését is. Íme például néhány példa a puffertípusokra, amelyekhez egy Memory2D
példány megfeleltethető:
- 2D memóriaterületként leképezett 1D
T[]
tömb sorszintű sorrendben. - Egy 2D
T[,]
tömb, amely közvetlenül egyMemory2D<T>
példányra van leképezve. - 3D
T[,,]
tömb, ahol egyMemory2D<T>
példány egy adott mélységi szeletet (réteget) képvisel.
A Memory2D<T>
típus számos segédprogram-módszert is elérhetővé tesz, beleértve a standard Memory<T>
által implementált API-felület nagy részét is. Tartalmaz például egy Slice(int, int)
módszert, amely megkönnyíti a 2D szeletelési műveletek elvégzését közvetlenül a virtuális 2D memóriahelyen, és a Memory2D<T>
példány automatikusan belsőleg módosítja a szükséges paramétereket, hogy a leképezést a kért eredménynek megfelelő megfelelő memóriaterület(ek)re helyezze át.
Szemantika
A következőképpen hozhat létre példányt Memory2D<T>
2D tömbből:
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>
Az ReadOnlyMemory2D<T>
olyan a Memory2D<T>
típusnak, mint ReadOnlyMemory<T>
az Memory<T>
-nak/-nek. Ugyanazokat a funkciókat teszi elérhetővé (kivéve az API-kat, amelyek a burkolt memóriaterület tartalmának módosítását foglalják magukban), és írásvédett nézetet biztosít tetszőleges 2D memóriahelyekhez. A típus működésével kapcsolatos további információkért tekintse meg a fenti típus bekezdését Memory2D<T>
.
Példák
További példákat találhatsz a egységtesztekben.
.NET Community Toolkit