2012-11-13 26 views
5

我有一個分配給核心#7的.NET線程。線程函數在300ms內觸發一次。最初大約需要20-30毫秒才能執行一次呼叫。但是這個時間逐漸增加,並且在大約2.52萬次呼叫之後變得超過150ms。線程逐漸增加處理器使用率

另外我已經注意到核心#7的使用從10%開始。當線程函數的調用次數達到2,52,000次時,核心#7的處理器使用率變爲大約60%。當我停止觸發線程函數時,處理器使用率變爲0%。但是當我開始再次觸發時,核心使用率從60%開始(不是從0%開始),並且再次逐漸增加。

我也注意到應用程序沒有內存泄漏。

在我的線程函數內我將兩個字典的元素組合起來,並將它添加到foreach循環中的另一個字典中。字典中的元素數將始終爲45.

我希望此應用程序能夠24/7運行。請讓我知道一些提示,以使這個處理器的使用量保持不變。

+0

你說,「字典中的元素數量總是45。」這三個詞典中的每一個的元素數量是多少?你確定沒有任何一本字典正在增長嗎?這聽起來像是一個使用自定義鍵類型的字典,它不能正確實現'GetHashCode'。 –

+0

謝謝吉姆Mischel, 不。最大計數的組合字典是45它將被清除,一旦它達到45。其他兩個字典的最大數量從不跨越10 我的字典宣佈爲 'Dictionary myResults = new Dictionary ;' –

+0

然後你必須顯示一些代碼。線程庫不太可能導致CPU使用率的增加。更可能是你的代碼中的東西。 –

回答

4

將項目添加到Dictionary時,容量可能必須增加。你的字典是否會繼續增長?

MSDN

如果計數小於的能力,此方法的接近O(1)的操作。如果必須增加容量以適應新元素,則此方法變爲O(n)操作,其中n爲Count。

+0

感謝Jonathon Reinhart, 我的字典的大小從未穿過45。 –