我写了一个C#程序,有几千行和几个线程。执行工作正常几个小时/天,直到在Windows服务器上运行的应用程序开始减慢所有内容(其他程序/ Web服务器),因为它突然开始耗尽大约50-80%的CPU。
我认为它停留在某些while循环中,但我不知道究竟在哪里。知道哪个线程占用系统资源的最大份额已经是一个帮助。由于没有任何例外,我认为没有任何直接的可能性。
代码已经过检查,但我没有发现任何重大/明显的编程错误。
有人知道让Visual Studio监控当前CPU负载的好方法,以显示它用完的地方吗?
答案 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跟踪。