【发布时间】:2011-11-27 03:16:52
【问题描述】:
我有一个任务,我想一遍又一遍地运行。我想尽可能快地调用它,但是我想保持我的 cpu 周期低。我读过在后台工作人员中使用睡眠不是最佳选择。然而,如果没有睡眠,我的 cpu 保持在 55% 左右。我在下面有一个我的来源的例子。如果睡眠合适,您如何选择最佳睡眠时间,正如您从下面的结果中看到的那样,根据我的睡眠时间,我得到不同的结果。有人可以告诉我做类似事情时的最佳做法是什么
BackgroundWorker _Worker = new BackgroundWorker()
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
void Worker_DoWork(object sender, DoWorkEventArgs e)
{
// do my task here
// if i uncomment one of the Sleep below I reduce the CPU like so
// no sleep CPU = 52-58%
// Thread.Sleep(1); CPU = 09-15%
// Thread.Sleep(10); CPU = 02-03%
// Thread.Sleep(100); CPU = 00-01%
}
void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled) { return; }
_Worker.RunWorkerAsync();
}
【问题讨论】:
-
根据您的使用方式,也许 Timer 会更合适。
-
我考虑过计时器,但我的任务需要 5 秒到 5 分钟才能完成,所以我认为后台工作人员会是更好的选择。
-
您为什么关心 CPU 百分比?如果您想确保系统的其余部分保持响应,也许将其放在优先级较低的线程上会更合适。
-
根据您的应用程序,可以选择在有工作要做时使用信号量向工作线程发出信号,或者在没有工作时阻止它们......
标签: c# backgroundworker sleep