Span<T>
Span<T>は、配列やメモリ領域の一部分をコピーせずに参照するための型です。連続したメモリ領域を安全に扱い、不要な割り当てを減らす用途があります。
int[] values = { 10, 20, 30, 40, 50 };
Span<int> middle = values.AsSpan(1, 3);
middle[0] = 99;
Console.WriteLine(values[1]);
Spanは元の配列をコピーしません。そのためSpan経由の変更は元の配列にも反映されます。
ReadOnlySpan<T>
読み取りだけでよい場合はReadOnlySpan<T>を使います。文字列の一部分を扱う処理などで、部分文字列の割り当てを避けられる場合があります。
制約
Span<T>はref structであり、ヒープ上の通常のクラスフィールドへ保存できず、awaitをまたいで保持できません。制約を理解した上で、性能上の効果を計測して使いましょう。