Aller au contenu

Span<T> et Memory<T>

Contexte : Span<T> et Memory<T> sont des types ref‑struct introduits dans .NET Core 2.1 pour fournir un accès sûr et sans allocation à des régions de mémoire contiguës. Ils peuvent représenter des tableaux, des chaînes ou des tampons natifs. Span<T> est réservé à la pile, tandis que Memory<T> peut vivre sur le tas et être utilisé dans des méthodes asynchrones. Ils sont essentiels pour les scénarios haute performance où vous souhaitez éviter de copier des données.

using System;
public class SpanDemo
{
public static void SliceExample()
{
int[] numbers = { 1, 2, 3, 4, 5 };
Span<int> span = numbers.AsSpan();
Span<int> slice = span.Slice(1, 3); // {2,3,4}
slice[0] = 10; // Modifie le tableau original
Console.WriteLine(numbers[1]); // 10
}
}
Fenêtre de terminal
dotnet run
10
  • Span<T> ne peut pas être utilisé comme champ dans des méthodes asynchrones ou des classes.
  • Memory<T> est une alternative compatible avec le tas pour les scénarios asynchrones.

Analyse de lignes CSV – Au lieu d’allouer des sous‑chaînes, utilisez Span<char> et Slice pour analyser des valeurs séparées par des virgules sans allocations.
Voir documentation .NET sur Span.