我最近建立了一个服务,使用单线程周期性地处理信息。该服务是使用 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 对象时从未遇到过这种情况。有没有人对我可以转向哪里有任何好主意?
提前感谢您抽出时间。
最佳答案
听起来您的代码正在无限且意外地循环。
在 Visual Studio 调试器中启动它,当您看到高 CPU 时,点击“中断”暂停执行。当您重复执行此操作时看到的调用堆栈和其他程序状态应该让您了解您的逻辑有什么问题。
在调试器中单步执行代码可能会更快。这取决于代码的复杂程度。
关于c# - CPU使用率在执行过程中变得非常高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4219708/