C#程序耗尽了太多的CPU?

dsp*_*099 2 c# cpu performance loops timer

我有一个程序,开始不断在三个独立的计时器之间玩杂耍.

我的应用程序的主线程有一个while循环,不断检查全局变量是否已设置为true,如果有,它将停止一个计时器并启动另外两个 - 一个连续,另一个自动停止它,如果它不是'无论出于何种原因,他都要求停下来.

这个while循环的条件为(1 == 1),因此它会永远运行.

在任务管理器(XP)中,我看到我的程序在或多或少闲置的系统上占用了50%的CPU.

有没有办法通过降低while循环的速度来减少这个数字?

谢谢.

Jon*_*eet 11

有没有办法通过降低while循环的速度来减少这个数字?

只是停止忙碌的循环.有更好的方法来协调线程之间的事件.考虑使用Monitor.Wait/ Pulse,或AutoResetEvent/ ManualResetEvent.基本上,设置全局变量的线程应该表明它已经完成了.或者,如果您的主线程不会执行任何其他操作,为什么不添加正常的C#事件,以便每当更改变量时,都会引发事件并采取相应的操作?


Jon*_*Jon 6

您的程序执行繁忙等待,这是一种不好的做法.您应该更改逻辑,以便阻止某种同步原语(也称为等待句柄)而不是循环.

阻塞等待句柄不是UI线程的选项,因此您必须总共创建三个线程并实现如下方案:

  1. UI线程根本不涉及其他线程.没有循环,没有睡眠,没有阻塞.
  2. 新的"控制器"线程将启动现有的"工作线程"线程,然后立即阻止(例如,在未发出信号的事件上).它将保持此状态,而不消耗CPU,直到事件发出信号(即"工作人员"完成).
  3. "worker"线程将运行其路线,然后发出事件信号.