Aracılığıyla paylaş


Gecikme modları

Nesneleri geri kazanmak için, çöp toplayıcısı (GC) bir uygulamadaki tüm çalışan iş parçacıklarını durdurmalıdır. Atık toplayıcının etkin olduğu süre, gecikme süresi olarak adlandırılır.

Bir uygulamanın veri alması veya içerik görüntülemesi gibi bazı durumlarda, tam çöp toplama kritik bir anda gerçekleşebilir ve performansı olumsuz etkileyebilir. Çöp toplayıcının müdahaleciliğini, GCSettings.LatencyMode özelliğini System.Runtime.GCLatencyMode değerlerinden birine ayarlayarak düzenleyebilirsiniz.

Düşük gecikme süresi ayarları

"Düşük" gecikme süresi ayarı kullanmak, çöp toplayıcının uygulamanıza daha az müdahalede bulunmasını sağlar. Çöp toplama, belleği geri kazanma konusunda daha muhafazakardır.

Numaralandırma System.Runtime.GCLatencyMode iki düşük gecikme süresi ayarı sağlar:

  • GCLatencyMode.LowLatency 2. nesil koleksiyonları bastırır ve yalnızca 0. ve 1. nesil koleksiyonlar gerçekleştirir. Yalnızca kısa süreler için kullanılabilir. Uzun süreler boyunca, sistem bellek baskısı altındaysa, atık toplayıcı uygulamayı kısa süre duraklatabilecek ve zaman açısından kritik bir işlemi kesintiye uğratabilecek bir toplama tetikler. Bu ayar yalnızca iş istasyonu çöp toplama için kullanılabilir.

  • GCLatencyMode.SustainedLowLatency ön plandaki 2. nesil koleksiyonları bastırır ve yalnızca 0. nesil, 1. nesil ve arka plan 2. nesil koleksiyonlar gerçekleştirir. Daha uzun süre kullanılabilir ve hem iş istasyonu hem de sunucu çöp toplama için kullanılabilir. Arka plan çöp toplama devre dışı bırakıldıysa bu ayar kullanılamaz.

Düşük gecikme sürelerinde, aşağıdakiler gerçekleşmediği sürece 2. nesil koleksiyonlar gösterilmez:

  • Sistem, işletim sisteminden düşük bellek bildirimi alır.

  • Uygulama kodu, GC.Collect yöntemini çağırarak ve generation parametresi için 2 belirleyerek bir koleksiyonu başlatır.

Senaryo

Aşağıdaki tabloda, GCLatencyMode değerlerini kullanma uygulama senaryoları listelenir.

Gecikme modu Uygulama senaryoları
Batch Kullanıcı arabirimi (UI) veya sunucu tarafı işlemleri olmayan uygulamalar için.

Arka plan çöp toplama devre dışı bırakıldığında, bu iş istasyonu ve sunucu çöp toplama için varsayılan moddur. Batch modu ayrıca gcConcurrent ayarını geçersiz kılar, yani arka plan veya eşzamanlı koleksiyonları engeller.
Interactive Kullanıcı arabirimi olan çoğu uygulama için.

Bu, iş istasyonu ve sunucu çöp toplama için varsayılan moddur. Ancak, bir uygulama barındırılıyorsa, barındırma işleminin çöp toplayıcı ayarları önceliklidir.
LowLatency Atık toplayıcıdan kaynaklanan kesintilerin kesintiye neden olabileceği kısa vadeli, zamana duyarlı işlemlere sahip uygulamalar için. Örneğin, animasyonları veya veri alma işlevlerini işleyen uygulamalar.
SustainedLowLatency Çöp toplayıcıdan gelen kesintilerin aksamalara neden olabileceği, belirli ancak daha uzun olabilecek bir süre boyunca zamana duyarlı işlemler gerçekleştiren uygulamalar için. Örneğin, işlem saatlerinde piyasa verileri değiştikçe hızlı yanıt sürelerine ihtiyaç duyan uygulamalar.

Bu mod, diğer modlardan daha büyük bir yönetilen yığın boyutuna neden olur. Yönetilen yığını sıkıştırmadığından daha yüksek parçalanma mümkündür. Yeterli belleğin kullanılabilir olduğundan emin olun.

Düşük gecikme süresi kullanma yönergeleri

GCLatencyMode.LowLatency modunu kullanırken aşağıdaki yönergeleri göz önünde bulundurun:

  • Süreyi mümkün olan en kısa sürede düşük gecikme süresinde tutun.

  • Düşük gecikme sürelerinde yüksek miktarda bellek ayırmaktan kaçının. Atık toplama işlemi daha az nesneyi geri kazanacağından düşük bellek bildirimleri oluşabilir.

  • Düşük gecikme modundayken, özellikle büyük nesne yığınına ve sabitlenmiş nesnelere yapılan ayırmalar gibi yeni ayırmaların sayısını en aza indirin.

  • Ayırabilecek iş parçacıklarına dikkat edin. Özellik ayarı süreç genelinde olduğundan, ayırma işlemi yapan herhangi bir iş parçacığında istisnalar oluşturulabilir.

  • Düşük gecikmeli kodu kısıtlanmış yürütme bölgelerine kapsayın. Daha fazla bilgi için bkz. Kısıtlanmış yürütme bölgeleri.

  • yöntemi çağırarak GC.Collect(Int32, GCCollectionMode) düşük gecikme süresi boyunca 2. nesil koleksiyonları tetikleyebilirsiniz.

Ayrıca bakınız