Typy související s pamětí a rozsahem
Počínaje .NET Core 2.1 obsahuje .NET řadu vzájemně propojených typů, které představují souvislou oblast libovolné paměti typu silného typu. Tady jsou některé z nich:
System.Span<T>, typ, který se používá pro přístup k souvislé oblasti paměti. Instanci Span<T> lze zálohovat polem typu
T
, Stringvyrovnávací pamětí přidělenou stackalloc nebo ukazatelem na nespravovanou paměť. Vzhledem k tomu, že se musí přidělit v zásobníku, má řadu omezení. Například pole ve třídě nemůže být typu Span<T>, ani nelze použít v asynchronních operacích.System.ReadOnlySpan<T>, neměnná verze Span<T> struktury.
System.Memory<T>, obálka nad souvislou oblastí paměti. Instanci Memory<T> lze zálohovat polem typu
T
nebo Stringsprávcem paměti. Protože může být uložen na spravované haldě, Memory<T> nemá žádná omezení Span<T>.System.ReadOnlyMemory<T>, neměnná verze Memory<T> struktury.
System.Buffers.MemoryPool<T>, který přiděluje silné typy bloků paměti z fondu paměti vlastníkovi. IMemoryOwner<T> instance je možné pronajmout z fondu voláním MemoryPool<T>.Rent a uvolněním zpět do fondu voláním MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, který představuje vlastníka bloku paměti a řídí správu jeho životnosti.
MemoryManager<T>, abstraktní základní třídu, kterou lze použít k nahrazení implementace Memory<T> , aby Memory<T> bylo možné ji zálohovat dalšími typy, jako jsou bezpečné úchyty. MemoryManager<T> je určen pro pokročilé scénáře.
ArraySegment<T>, obálka pro určitý počet prvků pole začínajících na určitém indexu.
System.MemoryExtensions, kolekce metod rozšíření pro převod řetězců, polí a maticových segmentů na Memory<T> bloky.
System.Span<T>, System.Memory<T>a jejich readonly protějšky jsou navrženy tak, aby umožňovaly vytváření algoritmů, které se vyhýbají kopírování paměti nebo přidělování na spravované haldě více, než je nutné. Vytváření (buď prostřednictvím Slice
nebo jejich konstruktorů) nezahrnuje duplikování podkladových vyrovnávacích pamětí: aktualizují se pouze relevantní odkazy a posuny, které představují "zobrazení" zabalené paměti.
Poznámka
Pro starší architektury Span<T> a Memory<T> jsou k dispozici v balíčku System.Memory NuGet.
Další informace najdete v System.Buffers oboru názvů.
Práce s pamětí a rozsahem
Vzhledem k tomu, že typy související s pamětí a rozsahem se obvykle používají k ukládání dat v kanálu zpracování, je důležité, aby vývojáři při použití Span<T>a Memory<T>souvisejících typů dodržovali sadu osvědčených postupů. Tyto osvědčené postupy jsou popsané v pokynech k využití MemoryT<> a SpanT<>.