Aller au contenu

Memory<T> pour le tas ou l'asynchrone

Contexte : Memory<T> est une structure qui représente une région de mémoire contiguë pouvant vivre sur le tas (ex. un tableau) et être utilisée dans des méthodes asynchrones. Contrairement à Span<T>, Memory<T> n’est pas un ref struct, donc il peut être stocké dans des champs, capturé dans des lambdas asynchrones, et utilisé comme paramètre dans des méthodes asynchrones. Vous obtenez un Span<T> à partir d’un Memory<T> via la propriété Span.

using System;
using System.Threading.Tasks;
public class MemoryDemo
{
public static async Task ProcessAsync(Memory<byte> memory)
{
// Travailler avec la mémoire (ex. écrire dans un flux)
// Pour des opérations réelles, utilisez Memory<byte> directement avec WriteAsync
await Task.Delay(10);
Console.WriteLine($"Traitement de {memory.Length} octets");
}
public static async Task Example()
{
byte[] buffer = new byte[1024];
Memory<byte> memory = buffer.AsMemory();
await ProcessAsync(memory);
}
}
Fenêtre de terminal
dotnet run
Traitement de 1024 octets
  • Utilisez Memory<T> lorsque vous devez stocker la référence à travers des bornes await.
  • Convertissez en Span<T> uniquement pour des opérations synchrones à l’intérieur d’une méthode.

Copie de fichier asynchroneStream.ReadAsync et WriteAsync acceptent Memory<byte> pour lire/écrire des morceaux sans allocations supplémentaires.
Voir documentation .NET sur Memory.