Uyarılmış Koleksiyonlar
Çoğu durumda, çöp toplayıcı bir toplama işlemi için en uygun zamanı belirleyebilir ve bunun bağımsız olarak çalışmasına izin vermelisiniz. Zorlamalı bir koleksiyonun uygulamanızın performansını artırabileceği nadir durumlar vardır. Bu gibi durumlarda, bir çöp toplamayı zorlamak için yöntemini kullanarak çöp toplamaya GC.Collect neden olabilirsiniz.
Uygulamanızın kodunda GC.Collect belirli bir noktada kullanılan bellek miktarında önemli bir azalma olduğunda yöntemini kullanın. Örneğin, uygulamanız çeşitli denetimleri olan karmaşık bir iletişim kutusu kullanıyorsa, iletişim kutusu kapatıldığında çağrılması Collect , iletişim kutusu tarafından kullanılan belleği hemen geri kazanarak performansı artırabilir. Atık toplayıcı nesneleri en uygun olmayan zamanlarda geri kazanmaya çalıştığında performansı düşürebileceğinden uygulamanızın atık toplamayı çok sık göndermediğinden emin olun. Bir sonraki bölümde açıklandığı gibi, yalnızca koleksiyon üretken olduğunda toplamak için yöntemine bir GCCollectionMode.Optimized numaralandırma değeri Collect sağlayabilirsiniz.
GC toplama modu
Zorlamalı koleksiyonun GC.Collect davranışını aşağıdaki gibi belirtmek için bir GCCollectionMode değer içeren yöntem aşırı yüklemelerinden birini kullanabilirsiniz.
GCCollectionMode Değer |
Açıklama |
---|---|
Default | .NET'in çalışan sürümü için varsayılan çöp toplama ayarını kullanır. |
Forced | Çöp toplamayı hemen gerçekleşmeye zorlar. Bu, aşırı yüklemeyi çağırmaya GC.Collect() eşdeğerdir. Tüm nesillerin tam engelleyici bir koleksiyonuna neden olur. Ayrıca, hemen tam engelleyici çöp toplamayı zorlamadan önce özelliğini GCLargeObjectHeapCompactionMode.CompactOnce olarak ayarlayarak büyük nesne yığınını GCSettings.LargeObjectHeapCompactionMode sıkıştırabilirsiniz. |
Optimized | Atık toplayıcının nesneleri geri kazanmak için geçerli saatin en uygun olup olmadığını belirlemesini sağlar. Çöp toplayıcı, bir koleksiyonun gerekçelendirilecek kadar üretken olmadığını belirleyebilir ve bu durumda nesneleri geri almadan geri döner. |
Arka plan veya engelleme koleksiyonları
Oluşturulan koleksiyonun GC.Collect(Int32, GCCollectionMode, Boolean) engelleyip engellemediğini belirtmek için yöntem aşırı yüklemesini çağırabilirsiniz. Gerçekleştirilen koleksiyon türü, yöntemin mode
ve blocking
parametrelerinin bir bileşimine bağlıdır. mode
, numaralandırmanın GCCollectionMode bir üyesidir ve blocking
bir Boolean değerdir. Aşağıdaki tabloda ve blocking
bağımsız değişkenlerinin mode
etkileşimi özetlemektedir.
mode |
blocking = true |
blocking = false |
---|---|---|
Forced veya Default | Engelleme koleksiyonu mümkün olan en kısa sürede gerçekleştirilir. Bir arka plan koleksiyonu devam ediyor ve oluşturma 0 veya 1 ise, Collect(Int32, GCCollectionMode, Boolean) yöntem hemen bir engelleme koleksiyonu tetikler ve koleksiyon tamamlandığında döndürür. Bir arka plan koleksiyonu devam ediyorsa ve generation parametresi 2 ise, yöntem arka plan koleksiyonu bitene kadar bekler, engelleyici bir 2. nesil koleksiyonu tetikler ve sonra döndürür. |
Bir koleksiyon mümkün olan en kısa sürede gerçekleştirilir. Collect(Int32, GCCollectionMode, Boolean) yöntemi bir arka plan koleksiyonu istemektedir, ancak bu garanti edilmemektedir; koşullara bağlı olarak, engelleme koleksiyonu yine de gerçekleştirilebilir. Bir arka plan koleksiyonu zaten devam ediyorsanız, yöntemi hemen döndürür. |
Optimized | Çöp toplayıcının durumuna ve parametresine bağlı olarak bir engelleme toplaması generation gerçekleştirilebilir. Çöp toplayıcı en iyi performansı sağlamaya çalışır. |
Çöp toplayıcının durumuna bağlı olarak bir toplama gerçekleştirilebilir. Collect(Int32, GCCollectionMode, Boolean) yöntemi bir arka plan koleksiyonu istemektedir, ancak bu garanti edilmemektedir; koşullara bağlı olarak, engelleme koleksiyonu yine de gerçekleştirilebilir. Çöp toplayıcı en iyi performansı sağlamaya çalışır. Bir arka plan koleksiyonu zaten devam ediyorsanız, yöntemi hemen döndürür. |