M E D Y A T Ö R

Performans Dostu Kodlama: .NET Core MVC'de Garbage Collector Kullanımı

  • 21

    KASIM

    2024


  • Görüntülenme
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.