GC Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Kullanılmayan belleği otomatik olarak geri alan bir hizmet olan sistem çöp toplayıcısını denetler.
public ref class GC abstract sealed
public ref class GC sealed
public static class GC
public sealed class GC
type GC = class
Public Class GC
Public NotInheritable Class GC
- Devralma
-
GC
Örnekler
Aşağıdaki örnek, kullanılmayan bir nesne bloğu hakkında oluşturma ve bellek bilgilerini almak ve konsola yazdırmak için birkaç GC yöntemi kullanır. Daha sonra kullanılmayan nesneler toplanır ve sonuçta elde edilen bellek toplamları görüntülenir.
using System;
namespace GCCollectIntExample
{
class MyGCCollectClass
{
private const long maxGarbage = 1000;
static void Main()
{
MyGCCollectClass myGCCol = new MyGCCollectClass();
// Determine the maximum number of generations the system
// garbage collector currently supports.
Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);
myGCCol.MakeSomeGarbage();
// Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
// Determine the best available approximation of the number
// of bytes currently allocated in managed memory.
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
// Perform a collection of generation 0 only.
GC.Collect(0);
// Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
// Perform a collection of all generations up to and including 2.
GC.Collect(2);
// Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
Console.Read();
}
void MakeSomeGarbage()
{
Version vt;
for(int i = 0; i < maxGarbage; i++)
{
// Create objects and release them to fill up memory
// with unused objects.
vt = new Version();
}
}
}
}
open System
let maxGarbage = 1000
type MyGCCollectClass() =
member _.MakeSomeGarbage() =
for _ = 1 to maxGarbage do
// Create objects and release them to fill up memory with unused objects.
Version() |> ignore
[<EntryPoint>]
let main _ =
let myGCCol = MyGCCollectClass()
// Determine the maximum number of generations the system
// garbage collector currently supports.
printfn $"The highest generation is {GC.MaxGeneration}"
myGCCol.MakeSomeGarbage()
// Determine which generation myGCCol object is stored in.
printfn $"Generation: {GC.GetGeneration myGCCol}"
// Determine the best available approximation of the number
// of bytes currently allocated in managed memory.
printfn $"Total Memory: {GC.GetTotalMemory false}"
// Perform a collection of generation 0 only.
GC.Collect 0
// Determine which generation myGCCol object is stored in.
printfn $"Generation: {GC.GetGeneration myGCCol}"
printfn $"Total Memory: {GC.GetTotalMemory false}"
// Perform a collection of all generations up to and including 2.
GC.Collect 2
// Determine which generation myGCCol object is stored in.
printfn $"Generation: {GC.GetGeneration myGCCol}"
printfn $"Total Memory: {GC.GetTotalMemory false}"
0
Namespace GCCollectInt_Example
Class MyGCCollectClass
Private maxGarbage As Long = 10000
Public Shared Sub Main()
Dim myGCCol As New MyGCCollectClass
'Determine the maximum number of generations the system
'garbage collector currently supports.
Console.WriteLine("The highest generation is {0}", GC.MaxGeneration)
myGCCol.MakeSomeGarbage()
'Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
'Determine the best available approximation of the number
'of bytes currently allocated in managed memory.
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
'Perform a collection of generation 0 only.
GC.Collect(0)
'Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
'Perform a collection of all generations up to and including 2.
GC.Collect(2)
'Determine which generation myGCCol object is stored in.
Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol))
Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(False))
Console.Read()
End Sub
Sub MakeSomeGarbage()
Dim vt As Version
Dim i As Integer
For i = 0 To maxGarbage - 1
'Create objects and release them to fill up memory
'with unused objects.
vt = New Version
Next i
End Sub
End Class
End Namespace
Açıklamalar
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:
- Çöp toplayıcı, yönetilen kodda referans verilen yönetilen nesneleri arar.
- Çöp toplayıcı, referans edilmeyen nesneleri sonlandırmaya çalışır.
- Çö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.
Özellikler
| Name | Description |
|---|---|
| MaxGeneration |
Sistemin şu anda desteklediği en fazla nesil sayısını alır. |
Yöntemler
| Name | Description |
|---|---|
| AddMemoryPressure(Int64) |
Çalışma zamanını, atık toplama zamanlarken dikkate alınması gereken büyük bir yönetilmeyen bellek ayırması konusunda bilgilendirmektedir. |
| AllocateArray<T>(Int32, Boolean) |
Bir dizi ayırır. |
| AllocateUninitializedArray<T>(Int32, Boolean) |
Mümkünse sıfır başlatmayı atlarken bir dizi ayırır. |
| CancelFullGCNotification() |
Çöp toplama bildiriminin kaydını iptal eder. |
| Collect() |
Tüm nesillerin hemen çöp toplamaya zorlar. |
| Collect(Int32, GCCollectionMode, Boolean, Boolean) |
Bir atık toplamayı 0. nesilden belirtilen bir nesile, bir GCCollectionMode değer tarafından belirtilen bir zamanda, koleksiyonun engellenip sıkıştırılmayacağını belirten değerlerle zorlar. |
| Collect(Int32, GCCollectionMode, Boolean) |
Bir atık toplamayı 0. nesilden belirtilen bir nesile, bir GCCollectionMode değer tarafından belirtilen bir zamanda, koleksiyonun engellenip engellenmeyeceğini belirten bir değerle zorlar. |
| Collect(Int32, GCCollectionMode) |
Bir atık toplamayı 0. nesilden belirtilen bir nesile, bir GCCollectionMode değer tarafından belirtilen bir zamanda zorlar. |
| Collect(Int32) |
0. nesilden belirtilen bir nesle hemen çöp toplamaya zorlar. |
| CollectionCount(Int32) |
Belirtilen nesne oluşturma işlemi için çöp toplama işleminin kaç kez gerçekleştiğini döndürür. |
| EndNoGCRegion() |
GC bölgesi gecikme modunu sona erdirir. |
| GetAllocatedBytesForCurrentThread() |
Geçerli iş parçacığına ömrünün başlangıcından bu yana ayrılan toplam bayt sayısını alır. |
| GetConfigurationVariables() |
Çöp toplayıcı tarafından kullanılan yapılandırmaları alır. |
| GetGCMemoryInfo() |
Çöp toplama bellek bilgilerini alır. |
| GetGCMemoryInfo(GCKind) |
Çöp toplama bellek bilgilerini alır. |
| GetGeneration(Object) |
Belirtilen nesnenin geçerli nesil numarasını döndürür. |
| GetGeneration(WeakReference) |
Belirtilen zayıf başvurunun hedefinin geçerli nesil numarasını döndürür. |
| GetTotalAllocatedBytes(Boolean) |
İşlemin ömrü boyunca ayrılan bayt sayısını alır. Döndürülen değer herhangi bir yerel ayırma içermez. |
| GetTotalMemory(Boolean) |
Parçalanma hariç yığın boyutunu alır. Örneğin, toplam GC yığın boyutu 100 mb ve parçalanma, yani boş nesneler tarafından kaplanmış alan 40 mb'ı kaplarsa, bu API 60 mb'ı rapor eder. Parametre, sistemin çöp toplamasına ve nesneleri sonlandırmasına izin vermek için bu yöntemin geri dönmeden önce kısa bir süre bekleyip bekleyemeyeceğini gösterir. |
| GetTotalPauseDuration() |
İşlemin başlangıcından bu yana GC'de duraklatılan toplam süreyi alır. |
| KeepAlive(Object) |
Belirtilen nesneye başvurur ve bu da geçerli yordamın başlangıcından bu yöntemin çağrıldığı noktaya kadar çöp toplama için uygun olmadığını gösterir. |
| RefreshMemoryLimit() |
Atık Toplayıcı'ya sistemdeki çeşitli bellek sınırlarını algılayarak kendisini yeniden yapılandırmasını bildirir. |
| RegisterForFullGCNotification(Int32, Int32) |
Koşullar tam çöp toplamayı desteklediğinde ve toplama tamamlandığında bir çöp toplama bildiriminin tetiklenmesi gerektiğini belirtir. |
| RegisterNoGCRegionCallback(Int64, Action) |
GC olmayan bölgede belirli miktarda bellek ayrıldığında çağrılacak bir geri çağırma kaydeder. |
| RemoveMemoryPressure(Int64) |
Çalışma zamanına, yönetilmeyen belleğin serbest bırakıldığını ve atık toplamayı zamanlarken artık dikkate alınması gerekmediğini bildirir. |
| ReRegisterForFinalize(Object) |
Sistemin, daha önce çağrılan belirtilen nesne SuppressFinalize(Object) için sonlandırıcıyı çağırmasını istemektedir. |
| SuppressFinalize(Object) |
Ortak dil çalışma zamanının belirtilen nesne için sonlandırıcıyı çağırmaması isteğinde bulunur. |
| TryStartNoGCRegion(Int64, Boolean) |
Belirtilen miktarda bellek varsa kritik bir yolun yürütülmesi sırasında çöp toplamaya izin vermemeye çalışır ve başlangıçta yeterli bellek yoksa çöp toplayıcının tam engelleme çöp toplaması yapıp yapmadığını denetler. |
| TryStartNoGCRegion(Int64, Int64, Boolean) |
Büyük nesne yığını ve küçük nesne yığını için belirtilen miktarda bellek varsa kritik bir yolun yürütülmesi sırasında çöp toplamaya izin vermemeye çalışır ve başlangıçta yeterli bellek yoksa çöp toplayıcının tam engelleme çöp toplaması yapıp yapmadığını denetler. |
| TryStartNoGCRegion(Int64, Int64) |
Büyük nesne yığını ve küçük nesne yığını için belirtilen miktarda bellek varsa, kritik bir yolun yürütülmesi sırasında çöp toplamaya izin vermemeye çalışır. |
| TryStartNoGCRegion(Int64) |
Belirtilen miktarda bellek varsa kritik bir yolun yürütülmesi sırasında çöp toplamaya izin vermemeye çalışır. |
| WaitForFullGCApproach() |
Ortak dil çalışma zamanı tarafından çöp toplamayı engelleyen tam bir bildirim olup olmadığını belirlemek için kayıtlı bildirimin durumunu döndürür. |
| WaitForFullGCApproach(Int32) |
Belirtilen zaman aşımı süresinde, ortak dil çalışma zamanı tarafından çöp toplamayı engelleyen tam bir bildirimin olup olmadığını belirlemek için kayıtlı bildirimin durumunu döndürür. |
| WaitForFullGCApproach(TimeSpan) |
Belirtilen zaman aşımı süresinde, ortak dil çalışma zamanı tarafından çöp toplamayı engelleyen tam bir bildirimin olup olmadığını belirlemek için kayıtlı bildirimin durumunu döndürür. |
| WaitForFullGCComplete() |
Ortak dil çalışma zamanı tarafından çöp toplamayı engelleyen tam bir bildirimin tamamlanıp tamamlanmadığını belirlemek için kayıtlı bildirimin durumunu döndürür. |
| WaitForFullGCComplete(Int32) |
Belirtilen zaman aşımı süresinde, çalışma zamanının tamamladığı ortak dile göre çöp toplamayı engelleyen tam bir bildirim olup olmadığını belirlemek için kayıtlı bildirimin durumunu döndürür. |
| WaitForFullGCComplete(TimeSpan) |
Engelleyici çöp toplama işleminin tamamlanıp tamamlanmadığına ilişkin kayıtlı bildirimin durumunu döndürür. Tam koleksiyon için süresiz olarak bekleyebilir. |
| WaitForPendingFinalizers() |
Sonlandırıcı kuyruğu işleyen iş parçacığı bu kuyruğu boşaltana kadar geçerli iş parçacığını askıya alır. |
Şunlara uygulanır
Ayrıca bkz.
- GCSettings
- Çöp Toplama
- çöp toplama temelleri