C# · Avançado · Inglês · Técnico
Memory
Memory<T> é o equivalente do Span<T> que pode morar no heap: serve como campo de classe e atravessa awaits, expondo a propriedade Span para acessar os dados.
Onde usar
Aparece em APIs assíncronas de I/O, como Stream.ReadAsync(Memory<byte>), onde um Span não poderia ser usado. Você converte para Span dentro do trecho síncrono que processa os bytes.
Em código
byte[] fonte = { 1, 2, 3 };
using var ms = new MemoryStream(fonte);
Memory<byte> m = new byte[8];
int n = await ms.ReadAsync(m);
Console.WriteLine(n); // 3
m.Span[0] = 7;Exemplos
Use Memory here because we cross an await.
Use Memory aqui porque atravessamos um await.
Get the Span from the Memory inside the sync part.
Pegue o Span do Memory no trecho síncrono.
Cuidado
Não use Memory onde Span bastaria: ele é maior e mais lento de acessar, e só compensa quando o dado precisa sair da stack.
Sinônimos
Memory<T>