2012-11-13 16 views
5

Çekirdek # 7'ye ayrılmış bir .NET iş parçacığım var. İş parçacığı işlevi 300 ms'de bir kez tetiklenir. Başlangıçta bir çağrı yürütmek için yaklaşık 20-30 ms sürer. Ancak bu süre kademeli olarak artar ve yaklaşık 2,52.000 aramadan sonra 150 ms'den fazla olur.İş parçacığı yavaş yavaş işlemci kullanımını artırır

Ayrıca çekirdek # 7'nin kullanımının% 10'da başladığını fark ettim. İş parçacığı işlevine yapılan çağrı sayısı 2,52.000'e ulaştığında çekirdek # 7'nin işlemci kullanımı% 60 civarında olur. İş parçacığı işlevini tetiklemeyi bıraktığımda, işlemci kullanımı% 0 olur. Fakat tekrar tetiklemeye başladığımda çekirdek kullanım% 60'tan başlar (% 0'dan değil) ve tekrar kademeli olarak artar.

Ayrıca uygulama için bellek sızıntısı olmadığını fark ettim.

İş parçacığı işlevimin içinde, iki Sözlükün öğelerini birleştirip onu foreach döngüsündeki başka bir sözlüğe ekliyorum. Sözlükdeki eleman sayısı her zaman 45 olacaktır.

Bu uygulamanın 7/24 çalışmasını istiyorum. Lütfen bu işlemci kullanımını sabit hale getirmek için bazı ipuçlarını bildirin.

+0

"Sözlüğündeki öğe sayısı her zaman 45 olacaktır." Bu üç sözlüklerin her birindeki eleman sayısı mı? Sözlüklerin hiçbirinin büyüyor olmadığından emin misiniz? Bu bana GetHashCode'u doğru bir şekilde uygulayamayan özel bir anahtar türü kullanarak bir sözlük gibi geliyor. –

+0

Teşekkürler Jim Mischel, Hayır. Birleştirilmiş sözlüğün maksimum sayısı 45'tir. 45'e ulaştıktan sonra silinecektir. Ayrıca diğer iki sözlüklerin maksimum sayısı hiçbir zaman 10'u geçmez. Sözlüküm 'Sözlük myResults = yeni Sözlük ; ' –

+0

Daha sonra bazı kodları göstermeniz gerekecek. İş parçacığı kitaplığının bu artan CPU kullanımına neden olması pek olası değildir. Kodunuzda çok daha muhtemel bir şey var. –

cevap

4

Bir öğeye Dictionary eklediğinizde, kapasitenin artırılması gerekebilir. Sözlüğün sonsuza kadar büyümeye devam ediyor mu? MSDN kaynaktan

:

Sayısı kapasitesinden daha az ise, bu yöntem, bir O (1) yaklaşır. Kapasitenin yeni öğeye uyum sağlayacak şekilde artırılması gerekiyorsa, bu yöntem n'nin Count olduğu bir O (n) işlem haline gelir.

+0

Teşekkürler Jonathon Reinhart, Benim sözlük boyutu asla 45 geçmez. –