Garbage Collector (GC) Nedir?
Garbage Collector, bellekte artık kullanılmayan nesneleri
otomatik olarak temizleyen bir bellek yönetim aracıdır. Uygulama çalışırken,
dinamik olarak oluşturulan nesneler zamanla bellek alanını doldurur ve
kullanılmadıklarında bile bellekte yer kaplamaya devam ederler. GC, bu artık
nesneleri algılayıp temizleyerek belleği boşaltır ve uygulamanın performansını
korur.
Garbage Collector Nasıl Çalışır?
Garbage Collector, .NET Core uygulamaları çalışırken arka
planda otomatik olarak çalışır. İşleyişi üç ana aşamada gerçekleşir:
1.
Köklerin Belirlenmesi: Uygulamanın erişebileceği nesneler belirlenir. Bu kökler, bellekten
silinmemesi gereken nesneleri işaret eder.
2.
İşaretleme:
GC, kökler dışında kalan tüm nesneleri tarar ve hangilerinin kullanılmadığını
belirler.
3. Bellek Temizleme: Artık kullanılmayan nesneler bellekten temizlenir ve bu alan diğer nesneler için kullanıma açılır.
.NET Core MVC'de Garbage Collector Nasıl Etkili Kullanılır?
Garbage Collector’ın çalışmasını doğru yönetmek, uygulamanın
performansını artırabilir. İşte bazı ipuçları:
1.
Nesnelerin Ömrünü Doğru Yönetin: Uzun süreli nesneler, kısa ömürlü nesnelere göre daha
maliyetlidir. AddScoped, AddTransient, ve AddSingletongibi yaşam döngülerini doğru kullanarak bellek yükünü azaltabilirsiniz.
2.
Dispose Kullanımı: IDisposable arayüzünü uygulayarak nesneleri manuel olarak serbest
bırakmak mümkündür. Bu, GC’nin daha az çalışmasını sağlar.
3.
Çöp Toplama Modlarını Tanıyın: .NET Core MVC’de Workstation GC (tek işlemcili) ve Server
GC (çok işlemcili) olmak üzere iki GC modu vardır. Server GC, yüksek
performans gerektiren uygulamalarda daha verimlidir.
Aşağıdaki örnekte, manuel olarak oluşturulan nesnelerin Dispose yöntemiyle bellekten nasıl serbest bırakılabileceğini görebilirsiniz:
public class FileManager : IDisposable { private FileStream fileStream; public FileManager(string path) { fileStream = new FileStream(path, FileMode.Open); } public void Dispose() { fileStream?.Dispose(); } } |
Bu örnekte, FileManager sınıfı IDisposable arayüzünü uygular ve Dispose yöntemiyle FileStream nesnesini serbest bıraktığını gördük.
GC'nin Performans Üzerindeki Etkisi
Garbage Collector, uygulamayı hızlandırabilir, ancak çok sık
çalıştığında ters etki yapabilir. Bu yüzden bellek kullanımı ile ilgili
verileri takip ederek doğru GC modunu seçmek önemlidir. Örneğin, genç
nesiller (Gen 0) çabuk temizlenir, ancak daha yaşlı nesiller (Gen 1 ve
Gen 2) daha uzun sürede temizlenir. Bu bilgileri kullanarak bellek
yoğunluğunu yönetebilirsiniz.
.NET Core MVC’de Garbage Collector kullanımı, bellek
yönetimini optimize etmenin etkili bir yoludur. GC’nin nasıl çalıştığını
bilmek, uygulamanızın performansını artırabilir ve kullanıcı deneyimini
iyileştirebilir. Performans dostu kod yazmanın temelinde GC’yi anlamak ve doğru
şekilde yönetmek yatar.