Memóriával és átfedéssel kapcsolatos típusok
A .NET Core 2.1-től kezdve a .NET számos egymáshoz kapcsolódó típust tartalmaz, amelyek tetszőleges memória összefüggő, erősen típusos régióját jelölik. Ezek a következők:
System.Span<T>, egy olyan típus, amely egy összefüggő memóriaterület elérésére szolgál. A Span<T> példányok egy típustömb
T
, egy Stringstackalloc-tal lefoglalt puffer vagy egy nem felügyelt memóriára mutató mutató segítségével is támogatottak. Mivel a veremben kell lefoglalni, számos korlátozással rendelkezik. Például egy osztály egyik mezője nem lehet típus Span<T>, és nem használható az aszinkron műveletekben.System.ReadOnlySpan<T>, a Span<T> struktúra nem módosítható változata.
System.Memory<T>, egy burkoló egy összefüggő memóriaterület felett. A Memory<T> példányok egy típustömb
T
, egy String, vagy egy memóriakezelő segítségével is támogatottak. Mivel a felügyelt halomtárban tárolható, Memory<T> nem rendelkezik a korlátozásokkal Span<T>.System.ReadOnlyMemory<T>, a Memory<T> struktúra nem módosítható változata.
System.Buffers.MemoryPool<T>, amely erősen gépelt memóriablokkokat foglal le egy memóriakészletből egy tulajdonosnak. IMemoryOwner<T> a példányok bérelhetők a készletből a készlet hívásával MemoryPool<T>.Rent és a készletbe való visszaengedésével MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, amely egy memóriablokk tulajdonosát jelöli, és szabályozza annak élettartam-kezelését.
MemoryManager<T>, egy absztrakt alaposztály, amely az implementáció Memory<T> cseréjére használható, így Memory<T> további típusokkal, például biztonságos fogópontokkal is alátámasztható. MemoryManager<T> speciális forgatókönyvekhez készült.
ArraySegment<T>, egy adott számú tömbelem burkolója egy adott indextől kezdve.
System.MemoryExtensions, a sztringek, tömbök és tömbszegmensek blokkokká Memory<T> alakítására szolgáló bővítménymetóciók gyűjteménye.
System.Span<T>, System.Memory<T>és a megfelelőiket úgy tervezték, hogy lehetővé tegyék olyan algoritmusok létrehozását, amelyek a szükségesnél több memóriát másolnak vagy lefoglalnak a felügyelt halomra. A létrehozásuk (akár a konstruktorokon keresztül, akár a konstruktorokon keresztül Slice
) nem jár az alapul szolgáló pufferek duplikálásával: csak a megfelelő hivatkozások és eltolások frissülnek, amelyek a burkolt memória "nézetét" képviselik.
Megjegyzés
A korábbi keretrendszerekhez, Span<T> és Memory<T> a System.Memory NuGet csomagban érhetők el.
További információt a névtérben System.Buffers talál.
Memória és időtartam használata
Mivel a memóriával és az átfedéssel kapcsolatos típusokat általában feldolgozási folyamatokban tárolják, fontos, hogy a fejlesztők az ajánlott eljárásokat követve használják Span<T>a , Memory<T>és a kapcsolódó típusokat. Ezeket az ajánlott eljárásokat a MemoryT<> és a SpanT>< használati irányelvei dokumentálják.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: