2015-05-07 14 views
9

İki milyon kayıt saklamak için eşzamanlı bir sözlük kullanıyorum ve sözlüğümün eşzamanlılık düzeyini neyin başlatılacağını bilmek istiyorum.eşzamanlı bir sözlük eşzamanlılık düzeyini nasıl seçti

MSDN sayfa onun örnek kodda şu yorumu vardır:

yüksek concurrencyLevel, ConcurrentDictionary üzerinde eş zamanlı gerçekleştirilen olabilir operasyonların yüksek teorik sayısı. Ancak, sözdizimini yeniden boyutlandırmak gibi global işlemler, eşzamanlılıkLevel yükseldikçe daha uzun sürer.

Bu, concurrencyLevel'in ne anlama geldiğini ve bunun hala çok belirsiz olduğunu açıklayan bulabildiğim en iyisidir.

cevap

10

anlaşılması gereken en önemli şey concurrencyLevel fazla eşzamanlı erişimlerin olsa bile, operasyonlar hala iş parçacığı güvenli olacak olmasıdır. Yani, concurrencyLevel ayarı, bir doğruluk değil, bir performans meselesidir.

concurrencyLevel Harita işlemleri için kullanılabilen bağımsız kilitlerin sayısını belirtir. Eşzamanlı olarak sözlüğe erişen n iş parçacığına sahipseniz, n'dan daha yüksek concurrencyLevel ayarı, herhangi bir ek yarar sağlamayacaktır. Genel olarak, concurrencyLevel için en uygun değer, çalışan bir işçinin sayısından önemli ölçüde daha düşük olacaktır, çünkü belirli bir çalışan, zamanının çoğunu sözlüğe erişmeye harcamaz.

Uygulamanızın profillenmesi, gerçekten en uygun concurrencyLevel değerini belirlemenin tek yoludur. Gerçi beklenen sayıda iş parçacığına ayarlamak iyi bir başlangıçtır.

+0

profilleme kısmında Anlaştı. Bunu söylemenin tek yolu gerçekten. –

+0

Bunu izlemek için hangi araçları kullanabileceğinizi açıklayabilirsiniz (örn. VS Concurrency Visualizer). Ayrıca, özellikle profilde profilleme sırasında ne arıyoruma, concurrencyLevel'i arttırmalı/değiştirmeliyim? –