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.
Exemple d’utilisation
Section intitulée « Exemple d’utilisation »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); }}Sortie console
Section intitulée « Sortie console »dotnet runTraitement de 1024 octetsRemarques importantes
Section intitulée « Remarques importantes »- Utilisez
Memory<T>lorsque vous devez stocker la référence à travers des bornesawait. - Convertissez en
Span<T>uniquement pour des opérations synchrones à l’intérieur d’une méthode.
Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »Copie de fichier asynchrone – Stream.ReadAsync et WriteAsync acceptent Memory<byte> pour lire/écrire des morceaux sans allocations supplémentaires.
Voir documentation .NET sur Memory