Minnes- och span-relaterade typer
Från och med .NET Core 2.1 innehåller .NET ett antal relaterade typer som representerar en sammanhängande, starkt typad region med godtyckligt minne. Dessa omfattar:
System.Span<T>, en typ som används för att komma åt en sammanhängande minnesregion. En Span<T> instans kan backas upp av en matris av typen
T
, en String, en buffert som allokerats med stackalloc eller en pekare till ohanterat minne. Eftersom den måste allokeras på stacken har den ett antal begränsningar. Ett fält i en klass kan till exempel inte vara av typen Span<T>, och kan inte heller användas i asynkrona åtgärder.System.ReadOnlySpan<T>, en oföränderlig version av Span<T> strukturen.
System.Memory<T>, en omslutning över en sammanhängande minnesregion. En Memory<T> instans kan backas upp av en matris av typen
T
, eller en String, eller en minneshanterare. Eftersom den kan lagras på den hanterade heapen Memory<T> har ingen av Span<T>begränsningarna för .System.ReadOnlyMemory<T>, en oföränderlig version av Memory<T> strukturen.
System.Buffers.MemoryPool<T>, som allokerar starkt inskrivna minnesblock från en minnespool till en ägare. IMemoryOwner<T> instanser kan hyras från poolen genom att anropa MemoryPool<T>.Rent och släppas tillbaka till poolen genom att anropa MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, som representerar ägaren av ett minnesblock och styr dess livslängdshantering.
MemoryManager<T>, en abstrakt basklass som kan användas för att ersätta implementeringen av Memory<T> så att Memory<T> den kan backas upp av ytterligare typer, till exempel säkra referenser. MemoryManager<T> är avsett för avancerade scenarier.
ArraySegment<T>, en omslutning för ett visst antal matriselement som börjar vid ett visst index.
System.MemoryExtensions, en samling tilläggsmetoder för att konvertera strängar, matriser och matrissegment till Memory<T> block.
System.Span<T>, System.Memory<T>och deras skrivskyddade motsvarigheter är utformade för att göra det möjligt att skapa algoritmer som undviker att kopiera minne eller allokera på den hanterade heapen mer än nödvändigt. Att skapa dem (antingen via Slice
eller deras konstruktorer) innebär inte att de underliggande buffertarna dupliceras: endast relevanta referenser och förskjutningar, som representerar "vyn" för det omslutna minnet, uppdateras.
Anteckning
För tidigare ramverk Span<T> och Memory<T> är tillgängliga i NuGet-paketet System.Memory.
Mer information finns i System.Buffers namnområdet.
Arbeta med minne och spann
Eftersom minnes- och span-relaterade typer vanligtvis används för att lagra data i en bearbetningspipeline är det viktigt att utvecklare följer en uppsättning metodtips när de använder Span<T>, Memory<T>och relaterade typer. De här metodtipsen beskrivs i riktlinjerna för minnesanvändning<> och SpanT-användning<>.