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 yöntemini kullanarak çöp toplamaya Collect zorlayabilir.

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

  1. Çöp toplayıcı, yönetilen kodda başvuruda bulunan yönetilen nesneleri arar.
  2. Çöp toplayıcı, başvurulmayan nesneleri son haline getirmeye ç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, atık toplayıcı yönetilen koddaki nesneye bir veya daha fazla başvuru bulursa bir nesneyi serbest getirmez. Ancak, çöp toplayıcı yönetilmeyen koddan bir nesneye başvuruları tanımaz ve açıkça engellenmediği sürece özel olarak yönetilmeyen kodda kullanılan nesneleri serbest kalabilir. 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ının uygulamaları dosya tanıtıcıları veya veritabanı bağlantıları gibi bir nesne tarafından tutulan kaynaklar hakkındaki bilgileri korumaz. 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 yöntemi geçersiz kılınarak Object.Finalize uygulanır; ancak C# veya C++ ile yazılan türler, derleyicilerin geçersiz kılmaya Object.Finalizedönüştüren yıkıcıları uygular. Çoğu durumda, bir nesnenin sonlandırıcısı varsa, atık toplayıcı nesneyi boşaltmadan önce onu çağırır. Ancak, çöp toplayıcı her durumda sonlandırıcıları çağırmak için gerekli değildir; örneğin, SuppressFinalize yöntemi açıkça bir nesnenin sonlandırıcı ç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.Dispose arabirimini uygulayabilirIDisposable. Uygulayan Dispose sınıflar, sınıf anlaşmalarının bir parçası olarak, sınıf tüketicilerinin nesnesini temizlemek için yöntemini çağırması durumunda 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. Sistem tarafından desteklenen maksimum nesil sayısını belirlemek için özelliğinin değerini MaxGeneration 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. Parametre içeren generation yöntemin Collect aşırı yüklemeleri, atık 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. GC bölgesi gecikme modu yok, 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.

'nin aşırı yüklemelerinden birini çağırarak GC olmayan bölgenin kritik yolunun başlangıcını TryStartNoGCRegiontanımlarsınız. yöntemini çağırarak kritik yolunun EndNoGCRegion sonunu belirtirsiniz.

Yöntemine yapılan çağrıları TryStartNoGCRegion iç içe yerleştiremezsiniz ve yalnızca çalışma zamanı şu anda GC bölgesi gecikme modunda değilse yöntemini çağırmalısınız EndNoGCRegion . 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.