查找.NET多线程瓶颈

时间:2010-07-11 16:55:15

标签: .net performance multithreading debugging

问候。

我有一个.NET应用程序并行运行一堆模拟。它正在进行参数扫描,因此每个参数都有自己的Parallel.Foreach循环。我通常将最大并行度设置为除了一个循环之外的所有循环,以保持内存需求下降,因为每个参数可以采用比我可用内核更多的值(4)。

应用程序完全受CPU限制,最后只有I / O才能写出结果。我只在数据结构周围有一个锁定捕获结果,但很少访问(每隔几秒一次)。无论我在多大程度上推动并行性(通过控制环路上的最大并行度),我总是得到大约50%的平均CPU使用率(~2个核心)。

我想找出阻止更高CPU使用率的因素。我的猜测是:1)一些调用同步的.NET库,从而序列化调用。 2)GC踩到清理资源(应用程序生成了很多垃圾)。

有关如何进行调查的任何想法?

非常感谢。

1 个答案:

答案 0 :(得分:2)

我认为多线程问题的调试总是需要有关代码细节的知识,所以没有一般​​的配方。但我认为GC是一个非常好的第一猜测。你有没试过这个:

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

我遇到了类似的问题,并且使用gcServer允许它将CPU(8个核心)推到极限。