执行期间CPU使用率变得非常高

时间:2010-11-18 21:22:02

标签: c# .net multithreading timer cpu

我最近构建的服务使用单个线程来定期处理信息。该服务是使用Microsoft Visual Studio 2010 Express构建的。我注意到CPU使用率下降到月球(CPU使用率为100%)。

后来,出于好奇,我构建了一个非常小的程序,其中所做的只是启动一个小线程或计时器,然后运行一些令人难以置信的长循环。我还从构建控制台应用程序切换到Windows窗体应用程序。通过切换要构建的程序类型,我能够减少麻烦。

我尝试降低线程的优先级:

System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Lowest;

我也试过设置优先级

Process p = Process.GetCurrentProcess();
p.PriorityClass = ProcessPriorityClass.BelowNormal;

我还认为由于在虚拟机上运行,​​CPU使用率可能很高。但那个理论并没有把我带到任何地方。这太荒谬了。我不知道还能转向何处。我不确定为什么启动计时器或线程会像在.NET框架中那样通过天花板发送我的CPU使用率。我在构建COM对象时从未体验过这一点。对于我可以转向的地方,有没有人有任何好主意?

感谢您的提前时间。

2 个答案:

答案 0 :(得分:3)

听起来你的代码无限且意外地循环。

在Visual Studio调试器中启动它,当您看到高CPU时,点击“Break”暂停执行。当你反复这样做时,你看到的callstacks和其他程序状态会让你知道你的逻辑有什么问题。

简单地单步执行调试器中的代码可能会更快。这取决于代码的复杂程度。

答案 1 :(得分:2)

如果你在线程中反复循环,肯定会导致高CPU使用率。您是否尝试在循环之间为线程执行添加暂停?

Thread.Sleep(1000);