.NET Core (C#) İleri Seviye Bellek & Performans

Garbage Collector: Gen 0, 1, 2, LOH & IDisposable Pattern

.NET runtime'ın hafızayı 3 jenerasyon ve 85KB üzeri dev nesneler olarak temizleme motorudur.

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

Masanın üstündeki çöp kutusu (Gen 0), her gün boşaltılan oda çöpü (Gen 1) ve haftada bir gelen büyük çöp kamyonudur (Gen 2). 85KB üzeri nesneler ise doğrudan LOH (Büyük Eşya Alanı) olarak kabul edilir.

Teknik & Mimari Tanım

CLR Garbage Collector nesneleri yaşlarına göre 3 kuşağa ayırır: Gen 0 (yeni kısa ömürlü), Gen 1 (ara kuşak), Gen 2 (uzun ömürlü). 85.000 byte üzeri nesneler Large Object Heap (LOH)'e gider ve sıkıştırılmaz (fragmentation riski). Yönetilmeyen kaynaklar (unmanaged: dosya, socket, db connection) için IDisposable & using zorunludur.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“GC otomatik bellek yönetimi yapar ancak veritabanı bağlantısı, dosya akışı gibi unmanaged kaynakları temizleyemez. Bunun için IDisposable uygulanır ve using bloğuyla Dispose() garantilenir. LOH'a 85KB üzeri nesneler gider; Gen 2 toplamaları pahalı (stop-the-world) olduğundan nesne tahsisini minimize etmek gerekir.”

.NET Core (C#) Örnek Uygulaması
public class ResourceHolder : IDisposable
{
    private FileStream _file;
    public void Dispose()
    {
        _file?.Dispose();
        GC.SuppressFinalize(this);
    }
}
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

using bloğu kullanmayıp SqlConnection veya HttpClient nesnelerini kontrolsüzce havada bırakmak.