找出多线程C#程序卡在哪里

时间:2012-08-27 16:43:47

标签: c# visual-studio debugging

我写了一个C#程序,有几千行和几个线程。执行工作正常几个小时/天,直到在Windows服务器上运行的应用程序开始减慢所有内容(其他程序/ Web服务器),因为它突然开始耗尽大约50-80%的CPU。

我认为它停留在某些while循环中,但我不知道究竟在哪里。知道哪个线程占用系统资源的最大份额已经是一个帮助。由于没有任何例外,我认为没有任何直接的可能性。

代码已经过检查,但我没有发现任何重大/明显的编程错误。

有人知道让Visual Studio监控当前CPU负载的好方法,以显示它用完的地方吗?

2 个答案:

答案 0 :(得分:6)

哦,我喜欢Managed Stack Explorer。 http://mse.codeplex.com/适用于大多数.NET版本,https://github.com/vadimskipin/MSE适用于4.0

将其指向正在运行的应用程序,并快照每个线程的堆栈。查看几个快照后,您将找出问题所在。哦,当我第一次得知这个问题时,我遇到了这个问题的肮脏。哦,当它让我在几分钟内找到我一直在寻找的东西时,我感到高兴。

答案 1 :(得分:2)

当发生这种情况时,您可以使用Perfview(http://www.microsoft.com/en-us/download/details.aspx?id=28567)捕获并分析ETL跟踪。