İş istasyonu ve sunucu çöp toplama
Çöp toplayıcı kendi kendine ayarlıdır ve çok çeşitli senaryolarda çalışabilir. Ancak, iş yükünün özelliklerine göre çöp toplama türünü ayarlayabilirsiniz. CLR aşağıdaki çöp toplama türlerini sağlar:
İstemci uygulamaları için tasarlanmış iş istasyonu çöp toplama (GC). Tek başına uygulamalar için varsayılan GC tindedir. Örneğin, ASP.NET tarafından barındırılan barındırılan uygulamalar için ana bilgisayar varsayılan GC çeşidini belirler.
İş istasyonu çöp toplama eşzamanlı veya eş zamanlı olmayabilir. Eşzamanlı (veya arka plan) çöp toplama, yönetilen iş parçacıklarının bir çöp toplama sırasında işlemlere devam etmelerini sağlar. Arka plan çöp toplama , .NET Framework 4 ve sonraki sürümlerde eşzamanlı çöp toplamanın yerini alır.
Yüksek aktarım hızı ve ölçeklenebilirlik gerektiren sunucu uygulamalarına yönelik sunucu çöp toplama.
.NET Core'da, sunucu çöp toplama eşzamanlı veya arka plan dışında olabilir.
.NET Framework 4.5 ve sonraki sürümlerde, sunucu çöp toplama eşzamanlı veya arka plan dışı olabilir. .NET Framework 4 ve önceki sürümlerde, sunucu çöp toplama işlemi eşzamanlı değildir.
Aşağıdaki çizimde, bir sunucuda çöp toplama işlemini gerçekleştiren ayrılmış iş parçacıkları gösterilmektedir:
Performans değerlendirmeleri
İş İstasyonu GC
İş istasyonu çöp toplama için iş parçacığı oluşturma ve performans konusunda dikkat edilmesi gerekenler şunlardır:
Toplama, çöp toplamayı tetikleyen kullanıcı iş parçacığında gerçekleşir ve aynı önceliğe sahip kalır. Kullanıcı iş parçacıkları normalde normal önceliğe göre çalıştığından, atık toplayıcının (normal öncelikli iş parçacığında çalışan) CPU süresi için diğer iş parçacıklarıyla rekabet etmesi gerekir. (Yerel kod çalıştıran iş parçacıkları, sunucu veya iş istasyonu çöp toplama işlemlerinde askıya alınmaz.)
İş istasyonu çöp toplama işlemi her zaman yapılandırma ayarından bağımsız olarak yalnızca bir mantıksal CPU'ya sahip bir bilgisayarda kullanılır.
Sunucu GC
Aşağıda, sunucu çöp toplama için iş parçacığı oluşturma ve performansla ilgili dikkat edilmesi gerekenler yer alır:
Koleksiyon birden çok ayrılmış iş parçacığında gerçekleşir. Windows'da bu iş parçacıkları öncelik düzeyinde çalışır
THREAD_PRIORITY_HIGHEST
.Her mantıksal CPU için çöp toplama gerçekleştirmek için bir yığın ve ayrılmış bir iş parçacığı sağlanır ve yığınlar aynı anda toplanır. Her yığın küçük bir nesne yığını ve büyük bir nesne yığını içerir ve tüm yığınlara kullanıcı koduyla erişilebilir. Farklı yığınlardaki nesneler birbirine başvurabilir.
Birden çok çöp toplama iş parçacığı birlikte çalıştığından, sunucu çöp toplama işlemi aynı boyuttaki yığındaki iş istasyonu çöp toplama işlemine göre daha hızlıdır.
Sunucu çöp toplama genellikle daha büyük boyut segmentlerine sahiptir. Ancak bu yalnızca genelleştirmedir: segment boyutu uygulamaya özgüdür ve değiştirilebilir. Uygulamanızı ayarlarken çöp toplayıcı tarafından ayrılan kesimlerin boyutu hakkında varsayımlarda bulunmayın.
Sunucu çöp toplaması yoğun kaynak kullanımlı olabilir. Örneğin, dört mantıksal CPU'su olan bir bilgisayarda çalışan sunucu GC kullanan 12 işlem olduğunu düşünün. Tüm işlemler aynı anda çöp toplarsa, aynı mantıksal CPU üzerinde zamanlanmış 12 iş parçacığı olacağından birbirleriyle karışırlar. İşlemler etkinse, hepsinin sunucu GC'sini kullanmasını sağlamak iyi bir fikir değildir.
Bir uygulamanın yüzlerce örneğini çalıştırıyorsanız eşzamanlı çöp toplama devre dışı bırakılmış iş istasyonu çöp toplamayı kullanmayı göz önünde bulundurun. Bu, performansı geliştirebilecek daha az bağlam geçişiyle sonuçlanır.