Tipos relacionados com memória e vão
Começando por .NET Core 2.1, .NET inclui uma série de tipos interrelacionados que representam uma região contígua e fortemente dactilografada de memória arbitrária. Incluem-se:
System.Span<T>, um tipo que é usado para aceder a uma região contígua de memória. Um Span<T> caso pode ser apoiado por uma matriz de tipo
T
, a String, um tampão atribuído com stackalloc, ou um ponteiro para memória não gerido. Porque tem de ser atribuída na pilha, tem várias restrições. Por exemplo, um campo numa classe não pode ser do tipo Span<T>, nem pode ser utilizado em operações assíncronos.System.ReadOnlySpan<T>, uma versão imutável da Span<T> estrutura.
System.Memory<T>, um invólucro sobre uma região contígua de memória. Um Memory<T> caso pode ser apoiado por um tipo ,
T
ou um String, ou um gestor de memória. Como pode ser armazenado na pilha gerida, Memory<T> não tem nenhuma das limitações de Span<T>.System.ReadOnlyMemory<T>, uma versão imutável da Memory<T> estrutura.
System.Buffers.MemoryPool<T>, que atribui blocos de memória fortemente dactilografados de um pool de memória a um proprietário. IMemoryOwner<T> casos podem ser alugados da piscina ligando MemoryPool<T>.Rent e libertado de volta para a piscina, chamando MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, que representa o proprietário de um bloco de memória e controla a sua gestão vitalícia.
MemoryManager<T>, uma classe base abstrata que pode ser usada para substituir a implementação de modo Memory<T> que Memory<T> pode ser apoiado por tipos adicionais, tais como pegas seguras. MemoryManager<T> destina-se a cenários avançados.
ArraySegment<T>, um invólucro para um determinado número de elementos de matriz a partir de um determinado índice.
System.MemoryExtensions, uma coleção de métodos de extensão para converter cordas, matrizes e segmentos de matrizes em Memory<T> blocos.
System.Span<T>, System.Memory<T>e as suas congéneres são projetadas para permitir a criação de algoritmos que evitem copiar memória ou atribuir na pilha gerida mais do que o necessário. A sua criação (através Slice
ou dos seus construtores) não implica a duplicação dos amortecedores subjacentes: apenas as referências e compensações relevantes, que representam a "visão" da memória embrulhada, são atualizadas.
Nota
Para estruturas anteriores, Span<T> e estão Memory<T> disponíveis no pacote System.Memory NuGet.
Para mais informações, consulte o espaço de System.Buffers nomes.
Trabalhar com memória e vão
Como os tipos relacionados com a memória e o vão são normalmente utilizados para armazenar dados num pipeline de processamento, é importante que os desenvolvedores sigam um conjunto de boas práticas ao utilizarem Span<T>, Memory<T>e tipos relacionados. Estas boas práticas estão documentadas nas diretrizes de utilização MemoryT<> e SpanT<>.