Aracılığıyla paylaş


System.GC sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

GC sınıfı çöp toplayıcıyı denetler. Çöp toplayıcı, yönetilen belleğin ayrılmasını ve serbest bırakılmasını denetleen ortak bir dil çalışma zamanı bileşenidir. Bu sınıftaki yöntemler, bir nesne üzerinde çöp toplama gerçekleştirildiğinde ve bir nesne tarafından ayrılan kaynakların serbest bırakıldığında etkiler. Bu sınıftaki özellikler, sistemde kullanılabilen toplam bellek miktarı ve bir nesneye ayrılan bellek yaş kategorisi veya oluşturma hakkında bilgi sağlar.

Çöp toplayıcı yönetilen bellekte ayrılan nesneleri izler ve geri alır. Atık toplayıcı, geçerli başvuru bulunmayan nesnelere ayrılan belleği geri kazanmak için düzenli aralıklarla çöp toplama gerçekleştirir. Kullanılabilir boş bellek kullanılarak bellek isteği karşılanamadığında çöp toplama otomatik olarak gerçekleşir. Alternatif olarak, bir uygulama Collect yöntemini kullanarak çöp toplamayı zorlayabilir.

Çöp toplama aşağıdaki adımlardan oluşur:

  1. Çöp toplayıcı, yönetilen kodda referans verilen yönetilen nesneleri arar.
  2. Çöp toplayıcı, referans edilmeyen nesneleri sonlandırmaya çalışır.
  3. Çöp toplayıcı, başvurulmayan nesneleri serbest bırakır ve belleklerini geri alır.

Yönetilmeyen kaynaklar

Toplama sırasında, çöp toplayıcı yönetilen koddaki nesneye bir veya daha fazla başvuru bulursa nesneyi serbest bırakmaz. Ancak, çöp toplayıcı, yönetilmeyen koddan bir nesneye olan başvuruları tanımaz ve açıkça engellenmediği sürece, yönetilmeyen kodda kullanılan nesneleri serbest bırakabilir. yöntemi, KeepAlive atık toplayıcının yönetilmeyen kodda hala kullanımda olan nesneleri toplamasını engelleyen bir mekanizma sağlar.

Yönetilen bellek ayırmalarının yanı sıra, çöp toplayıcı uygulamaları, dosya tanıtıcıları veya veritabanı bağlantıları gibi bir nesne tarafından tutulan kaynaklar hakkındaki bilgileri sağlamaz. Bir tür, türün örnekleri geri kazanılmadan önce serbest bırakılması gereken yönetilmeyen kaynaklar kullandığında, tür bir sonlandırıcı uygulayabilir.

Çoğu durumda, sonlandırıcılar Object.Finalize yöntemi geçersiz kılınarak uygulanır; ancak C# veya C++ ile yazılan türler, derleyicilerin Object.Finalize geçersiz kılmaya dönüştürdüğü yıkıcılar uygular. Çoğu durumda, bir nesnenin sonlandırıcısı varsa, çöp toplayıcı nesneyi serbest bırakmadan önce onu çağırır. Ancak, çöp toplayıcının her durumda sonlandırıcıları çağırması zorunlu değildir; örneğin, SuppressFinalize yöntemi açıkça bir nesnenin sonlandırıcısının çağrılmasını engeller. Ayrıca, çöp toplayıcının nesneleri sonlandırmak için belirli bir iş parçacığı kullanması veya birbirine başvuran ancak başka bir şekilde çöp toplama için kullanılabilir olan nesneler için sonlandırıcıların çağrılma sırasını garanti etmesi gerekmez.

Kaynakların belirli bir zamanda yayımlanması gereken senaryolarda sınıflar, kaynak yönetimi ve temizleme görevlerini gerçekleştiren yöntemi içeren IDisposable arabirimini uygulayabilirIDisposable.Dispose. Dispose uygulayan sınıflar, sınıf anlaşmalarının bir parçası olarak, sınıf kullanıcılarının nesneyi temizlemek için yöntemi ne zaman ve hangi koşullarda çağıracağını belirtmelidir. Atık toplayıcı varsayılan olarak yöntemini çağırmaz Dispose ; ancak yönteminin Dispose uygulamaları, atık toplayıcının sonlandırma davranışını özelleştirmek için sınıfındaki GC yöntemleri çağırabilir.

Nesne sonlandırma ve atma düzeni hakkında daha fazla bilgi için bkz. Yönetilmeyen Kaynakları Temizleme.

Nesne eskime ve nesiller

Ortak dil çalışma zamanındaki çöp toplayıcı, nesilleri kullanarak nesne yaşlanmasını destekler. Nesil, bellekteki nesnelerin göreli yaşının ölçü birimidir. Bir nesnenin nesil numarası veya yaşı, bir nesnenin ait olduğu nesli belirtir. Daha yakın zamanda oluşturulan nesneler yeni nesillerin bir parçasıdır ve uygulama yaşam döngüsünde daha önce oluşturulan nesnelere göre daha düşük nesil sayılara sahiptir. En son nesildeki nesneler 0. nesildedir. Çöp toplayıcının bu uygulaması 0, 1 ve 2 nesilleri olan üç nesne neslini destekler. Sistemin desteklediği maksimum nesil numarasını belirlemek için MaxGeneration özelliğinin değerini alabilirsiniz.

Nesne eskime, uygulamaların atık toplayıcının tüm nesilleri değerlendirmesini gerektirmek yerine belirli bir nesil kümesinde çöp toplamayı hedeflemesine olanak tanır. Collect parametresi içeren generation yönteminin aşırı yüklemeleri, çöp toplanacak en eski nesli belirtmenize olanak tanır.

Çöp toplamaya izin verme

Çöp toplayıcı, atık toplamanın bir uygulamanın performansını olumsuz etkileyebileceği kritik yolların yürütülmesi sırasında kullanılabilecek GC bölgesi gecikme modunu desteklemez. "No GC bölgesi gecikme modu, atık toplayıcının müdahalesi olmadan ayrılabilecek bir bellek miktarı belirtmenizi gerektirir." Çalışma zamanı bu belleği ayırabiliyorsa, kritik yoldaki kod yürütülürken çalışma zamanı çöp toplama gerçekleştirmez.

GC'siz bölgedeki kritik yolun başlangıcını, TryStartNoGCRegion'nin aşırı yüklemelerinden birini çağırarak tanımlarsınız. yöntemini çağırarak kritik yolunun EndNoGCRegion sonunu belirtirsiniz.

TryStartNoGCRegion yöntemine yapılan çağrıları iç içe yerleştiremezsiniz. Yalnızca çalışma zamanı şu anda GC olmayan bölge gecikme modunda ise EndNoGCRegion yöntemini çağırmalısınız. Başka bir deyişle, birden çok kez çağırmamalısınız TryStartNoGCRegion (ilk yöntem çağrısından sonra, sonraki çağrılar başarılı olmaz) ve yalnızca başarılı olan ilk çağrının başarılı olması için çağrıların EndNoGCRegionTryStartNoGCRegion başarılı olmasını beklememelisiniz.