CodeBlanks Logo Icon CodeBlanks

GC.Collect

C# kursu · Uzman · Ders 4/47

GC.Collect ve GC.GetTotalMemory ile bellek yönetimini öğrenirsin.

GC.Collect ve GC.GetTotalMemory

GC.Collect() çöp toplayıcıyı zorla çalıştırır. Bu, genellikle önerilmez çünkü GC kendi zamanlamasını bozar; yalnızca belirli bir noktada belleğin boşaltılması gerekiyorsa kullanılır.

GC.GetTotalMemory(false) o an yönetilen bellekteki yaklaşık bayt sayısını döndürür; parametre true olursa toplamayı bekler. Bu değer ölçüm ve hata ayıklama için yararlıdır.

WaitForPendingFinalizers deseni

GC.Collect çağrıldıktan sonra finalizer'ların çalışması için GC.WaitForPendingFinalizers() bekletilir. Bu, finalizer'lı sınıfların kaynağını hemen serbest bırakmak istediğinde kullanılır.

Tipik desen: Collect → WaitForPendingFinalizers → Collect. İkinci Collect, finalizer tarafından serbest bırakılan belleği gerçekten geri kazanır. Bu örüntü, ölçüm ve test kodlarında tutarlı bellek değerleri almak için de yararlıdır.

Uygulama Topla ve mesaj yaz

Main'de önce GC.Collect(); çağır, sonra GC.WaitForPendingFinalizers();, en son Console.WriteLine("Toplandı"); yaz.

Örnek çözümü göster
GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine("Toplandı"); yaz.
Örnek çözüm:
using System;

class Program
{
    static void Main()
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Console.WriteLine("Toplandı");
    }
}

Kendini test et

  1. GC metotlarını eşleştir

    GC.Collect()
    Toplamayı zorla
    GC.GetTotalMemory(false)
    Yaklaşık bellek
    GC.WaitForPendingFinalizers()
    Finalizer'ları bekler
    GC.KeepAlive(o)
    Nesneyi canlı tutar
  2. GC.Collect() ne zaman önerilir?

    • Her metot çağrısından sonra
    • Performans ölçümü veya belirli bir noktada
    • Her döngüde
    • Program açılışında her zaman
    Cevabı göster

    Performans ölçümü veya belirli bir noktada — Doğru. GC.Collect yalnızca özel durumlarda, ölçüm için kullanılır.

  3. Toplamayı zorla

    GC.____();
    GC.WaitForPendingFinalizers();
    Cevabı göster
    GC.Collect();
    GC.WaitForPendingFinalizers();

Uzman bölümündeki tüm dersler