c# - CPU使用率在执行过程中变得非常高

标签 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 对象时从未遇到过这种情况。有没有人对我可以转向哪里有任何好主意?

提前感谢您抽出时间。

最佳答案

听起来您的代码正在无限且意外地循环。

在 Visual Studio 调试器中启动它,当您看到高 CPU 时,点击“中断”暂停执行。当您重复执行此操作时看到的调用堆栈和其他程序状态应该让您了解您的逻辑有什么问题。

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

关于c# - CPU使用率在执行过程中变得非常高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4219708/

相关文章:

c# - 如何自定义 Windows 窗体的系统菜单?

c# - 从 IoT Azure 中心获取所有设备

c# - 无法对调用静态方法的方法进行单元测试,我该如何重新设计这个程序?

c++ - C++多线程中的锁和条件变量问题

c# - 在 asp.net 网站中禁用 *.java 文件编译

c# - 如何在 Silverlight 中编写每 10 秒执行一次的程序?

c# - 使用 Visual C# (Dot Net Framework 4.0) 在 "Socket Programming"中需要帮助?

c++ - C++ 中的列表不为空,但没有要迭代的元素

java - 仅使用 ExecutorService 中的线程子集

C# 嵌套 - 外部类型的访问成员