2010-07-11 87 views
3

問候。查找.NET多線程瓶頸

我有一個.NET應用程序並行運行一堆模擬。它正在執行參數掃描,因此每個參數都有自己的Parallel.Foreach循環。除了一個循環之外,我通常將最大並行度設置爲1,以減少內存需求,因爲每個參數可以比我有內核可用的更多的值(4)。

該應用程序完全受CPU限制,只在最後輸入/輸出,才能寫出結果。我只有一個圍繞捕獲結果的數據結構的鎖,但很少訪問(每隔幾秒一次)。無論我推多少平行(通過控制循環上的最大並行度),我總能得到大約50%(〜2個核心)的平均CPU使用率。

我想知道什麼可以防止更高的CPU使用率。我的猜測是:1)一些調用.NET庫的同步,從而串行化調用。 2)GC加強清理資源(應用程序產生大量垃圾)。

任何想法如何去調查?

非常感謝。

回答

2

我覺得多線程問題的調試總是需要關於代碼細節的知識,所以沒有一般​​的配方。但我認爲GC是一個非常好的初步猜測。你是否已經嘗試過這樣一句:

http://msdn.microsoft.com/en-us/library/ms229357.aspx

我有一個類似的問題,並使用gcServer允許它的的CPU(8個核心)推到它的極限。

+0

哇。僅憑這一點,CPU使用率就高達75%。記憶似乎是穩定的。密切關注它。謝謝! – Mau 2010-07-11 17:52:22