Delen via


Geheugen- en spangerelateerde typen

Vanaf .NET Core 2.1 bevat .NET een aantal onderling gerelateerde typen die een aaneengesloten, sterk getypte regio van willekeurig geheugen vertegenwoordigen. Deze omvatten:

  • System.Span<T>, een type dat wordt gebruikt voor toegang tot een aaneengesloten regio van het geheugen. Een Span<T> exemplaar kan worden ondersteund door een matrix van het type T, een Stringbuffer die is toegewezen met stackalloc of een aanwijzer op onbeheerd geheugen. Omdat het moet worden toegewezen op de stack, heeft het een aantal beperkingen. Een veld in een klasse kan bijvoorbeeld niet van het type Span<T>zijn en kan ook niet worden gebruikt in asynchrone bewerkingen.

  • System.ReadOnlySpan<T>, een onveranderbare versie van de Span<T> structuur.

  • System.Memory<T>, een wrapper over een aaneengesloten regio van het geheugen. Een Memory<T> exemplaar kan worden ondersteund door een matrix van het type T, of een Stringof een geheugenbeheerder. Omdat het kan worden opgeslagen op de beheerde heap, Memory<T> heeft geen van de beperkingen van Span<T>.

  • System.ReadOnlyMemory<T>, een onveranderbare versie van de Memory<T> structuur.

  • System.Buffers.MemoryPool<T>, waarmee sterk getypte blokken geheugen van een geheugengroep worden toegewezen aan een eigenaar. IMemoryOwner<T> instanties kunnen worden gehuurd vanuit de pool door aan te roepen MemoryPool<T>.Rent en terug te brengen naar de pool door aan te roepen MemoryPool<T>.Dispose().

  • System.Buffers.IMemoryOwner<T>, die de eigenaar van een blok geheugen vertegenwoordigt en het levensduurbeheer bepaalt.

  • MemoryManager<T>, een abstracte basisklasse die kan worden gebruikt om de implementatie Memory<T> te vervangen, zodat Memory<T> deze kan worden ondersteund door aanvullende typen, zoals veilige ingangen. MemoryManager<T> is bedoeld voor geavanceerde scenario's.

  • ArraySegment<T>, een wrapper voor een bepaald aantal matrixelementen die beginnen bij een bepaalde index.

  • System.MemoryExtensions, een verzameling extensiemethoden voor het converteren van tekenreeksen, matrices en matrixsegmenten naar Memory<T> blokken.

System.Span<T>, System.Memory<T>en hun readonly tegenhangers zijn ontworpen om het maken van algoritmen toe te staan die voorkomen dat het kopiƫren van geheugen of het toewijzen van de beheerde heap meer dan nodig is. Het maken van deze buffers (via Slice of hun constructors) omvat niet het dupliceren van de onderliggende buffers: alleen de relevante verwijzingen en offsets, die de 'weergave' van het verpakte geheugen vertegenwoordigen, worden bijgewerkt.

Notitie

Voor eerdere frameworks Span<T> en Memory<T> zijn ze beschikbaar in het System.Memory NuGet-pakket.

Zie de System.Buffers naamruimte voor meer informatie.

Werken met geheugen en span

Omdat de geheugen- en spangerelateerde typen doorgaans worden gebruikt voor het opslaan van gegevens in een verwerkingspijplijn, is het belangrijk dat ontwikkelaars een set aanbevolen procedures volgen bij het gebruik Span<T>van en Memory<T>gerelateerde typen. Deze aanbevolen procedures worden beschreven in de gebruiksrichtlijnen voor MemoryT<> en SpanT<>.

Zie ook