Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O .NET inclui vários tipos relacionados que representam uma região contígua e fortemente tipificada de memória arbitrária. Esses tipos foram projetados para permitir a criação de algoritmos que evitam copiar memória ou alocar no heap gerenciado mais do que o necessário. Criá-los (via Slice, AsSpan(), uma expressão de coleção ou através de seus construtores) não envolve a duplicação dos buffers subjacentes: somente as referências e deslocamentos relevantes, que representam a "visão" da memória envolta, são atualizados. No código de alto desempenho, os intervalos geralmente são usados para evitar alocar cadeias de caracteres desnecessariamente.
Os tipos incluem:
System.Span<T>, um tipo usado para acessar uma região contígua de memória. Uma instância Span<T> pode ser sustentada por uma matriz do tipo
T, um buffer alocado com stackalloc ou um ponteiro para memória não gerenciada. Como ela deve ser alocada na pilha, tem várias restrições. Por exemplo, um campo em uma classe não pode ser do tipo Span<T>, nem pode ser usado em operações assíncronas.System.ReadOnlySpan<T>, uma versão imutável da Span<T> estrutura. As instâncias também podem ser apoiadas por um String.
System.Memory<T>, um wrapper sobre uma região contígua de memória. Uma Memory<T> instância pode ser apoiada por uma matriz de tipo
Tou um gerenciador de memória. Como ele pode ser armazenado no heap gerenciado, Memory<T> não tem nenhuma das limitações de Span<T>.System.ReadOnlyMemory<T>, uma versão imutável da Memory<T> estrutura. As instâncias também podem ser apoiadas por um String.
System.Buffers.MemoryPool<T>, que aloca blocos de memória fortemente tipados de um pool de memória para um proprietário. Instâncias IMemoryOwner<T> podem ser alocadas do pool chamando MemoryPool<T>.Rent e lançadas de volta ao pool chamando MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, que representa o proprietário de um bloco de memória e controla seu gerenciamento de ciclo de vida.
MemoryManager<T>, uma classe base abstrata que pode ser usada para substituir a implementação de Memory<T> para que Memory<T> possa ser respaldada por tipos adicionais, como identificadores seguros. MemoryManager<T> destina-se a cenários avançados.
ArraySegment<T>, um wrapper para um determinado número de elementos de matriz começando em um índice específico.
System.MemoryExtensions, uma coleção de métodos de extensão para converter cadeias de caracteres, matrizes e segmentos de matriz em Memory<T> blocos.
Para obter mais informações, consulte o System.Buffers namespace.
Como trabalhando com memória e extensão
Como os tipos relacionados à memória e ao intervalo geralmente são usados para armazenar dados em um pipeline de processamento, é importante que você siga um conjunto de práticas recomendadas ao usar Span<T>, Memory<T> e tipos relacionados. Essas práticas recomendadas estão documentadas nas diretrizes de uso de Memória<T> e Span<T>.