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

C# 执行期间CPU使用率变得非常高,c#,.net,multithreading,timer,cpu,C#,.net,Multithreading,Timer,Cpu,我最近构建了一个服务,它使用单个线程定期处理信息。该服务是使用Microsoft Visual Studio 2010 Express构建的。我注意到CPU的使用率飞向月球(CPU使用率为100%) 后来,出于好奇,我构建了一个非常小的程序,它所做的只是启动一个小线程或计时器,然后运行一些非常长的循环。我还从构建控制台应用程序切换到Windows窗体应用程序。通过将程序类型切换到构建,我可以减少麻烦 我已尝试降低线程的优先级: System.Threading.Thread.CurrentThr

我最近构建了一个服务,它使用单个线程定期处理信息。该服务是使用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 framework中那样让我的CPU使用率达到最高水平。我在构建COM对象时从未经历过这种情况。有没有人有什么好主意可以让我转向哪里


提前感谢您的时间。

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

Thread.Sleep(1000);

听起来你的代码正在无限地、意外地循环

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


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

Thread.Sleep(1000)帮助我理解了一切。真正的程序有点复杂。这是我编写的非常小的程序的一部分:System.Threading.Thread th=new-System.Threading.Thread(new-ThreadStart(ThreadFunc));th.优先级=线程优先级。最低;th.Start();public static void ThreadFunc(){System.Threading.Thread.Sleep(10000);或(long i=0;i<100000000;i++}System.Threading.Thread.Sleep(10000);}原始程序的目的是处理信息,但它必须经常运行(例如1/2小时或一小时)。我看到Windows计划程序只允许我安排一项任务,频率与每天相同。我想我会用一个线程来跟踪时间表,但我开始感觉到这并不是很聪明。所以我愿意接受建议。我想我可能会转而使用Windows任务调度程序,而不是尝试自己做事情,使用线程和计时器来保持程序的轻量级。谢谢大家,很好的关注。关于:Process.GetCurrentProcess().PriorityClass=ProcessPriorityClass.BelowNormal;我记得我试过。这似乎没有效果。考虑到该特定项目的性质,在该项目中它将定期运行,我想我最终通过Windows任务调度器安排了一个任务。我相信我也能够减少CPU的使用。我必须追踪项目+和我开始这个线程的时间,并分享一些源代码,以期帮助别人。