Span<T> ve Memory<T>: Sıfır Bellek Tahsisi (Zero-Allocation Performance)
String substring veya dizi bölmelerinde yeni kopya üretmeden belleğe doğrudan pencere açmaktır.
Koca bir kitaptan bir paragraf okumak istediğinde o sayfayı fotokopi çekmek yerine parmağınla o satırın altını çizip okumaktır.
Span<T> bir ref struct olup yalnızca Stack'te yaşar ve bitişik bellek bloklarına (array, string, native memory) güvenli, bounds-checked bir pencere (view) açar. Heap'te yeni nesne tahsis edilmediği için GC baskısı sıfıra iner. Asenkron metotlarda ise Stack kısıtı nedeniyle Memory<T> kullanılır.
“Span<T>, bellek üzerinde sıfır tahsis (zero-allocation) ile dizi veya metin manipülasyonu yapmayı sağlar. Substring() yeni bir string nesnesi allocate ederken, AsSpan() sadece bir işaretçi ve uzunluk tutarak GC Gen 0 yükünü tamamen ortadan kaldırır.”
string data = "DATE:2026-10-24;VALUE:42";
ReadOnlySpan<char> span = data.AsSpan();
ReadOnlySpan<char> datePart = span.Slice(5, 10); // HEAP TAHSİSİ YOK!
int year = int.Parse(datePart.Slice(0, 4));
Span<T>'yi async metotlarda veya Task içinde kullanmaya çalışmak (ref struct olduğu için heap'e taşınamaz, derleme hatası verir).