4

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

我假设它卡在了某个 while 循环中,但我不知道具体在哪里。知道哪个线程占用了系统资源的最大份额已经很有帮助。由于没有抛出任何异常,我看不到任何直接的可能性。

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

有没有人知道让 Visual Studio 监视当前 CPU 负载以显示它在哪里用完的好方法?

4

2 回答 2

7

哦,我多么喜欢托管堆栈资源管理器。http://mse.codeplex.com/对于大多数版本的 .NET 和https://github.com/vadimskipin/MSE对于 4.0

将它指向您正在运行的应用程序,它会为每个线程的堆栈生成快照。在查看一些快照后,您将找出问题所在。哦,当我第一次了解到这一点时,我所面临的问题很糟糕。哦,当它让我在短短几分钟内找到我一直在寻找的东西时,真是太高兴了。

于 2012-08-27T16:47:39.823 回答
2

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

于 2012-08-27T16:48:47.350 回答