問候。查找.NET多線程瓶頸
我有一個.NET應用程序並行運行一堆模擬。它正在執行參數掃描,因此每個參數都有自己的Parallel.Foreach
循環。除了一個循環之外,我通常將最大並行度設置爲1,以減少內存需求,因爲每個參數可以比我有內核可用的更多的值(4)。
該應用程序完全受CPU限制,只在最後輸入/輸出,才能寫出結果。我只有一個圍繞捕獲結果的數據結構的鎖,但很少訪問(每隔幾秒一次)。無論我推多少平行(通過控制循環上的最大並行度),我總能得到大約50%(〜2個核心)的平均CPU使用率。
我想知道什麼可以防止更高的CPU使用率。我的猜測是:1)一些調用.NET庫的同步,從而串行化調用。 2)GC加強清理資源(應用程序產生大量垃圾)。
任何想法如何去調查?
非常感謝。
哇。僅憑這一點,CPU使用率就高達75%。記憶似乎是穩定的。密切關注它。謝謝! – Mau 2010-07-11 17:52:22