poc*_*oco 5 c# sleep backgroundworker
我有一项任务,我想一遍又一遍地运行.我想尽可能快地调用它,但是我想保持我的cpu周期较低.我在后台工作中使用Sleep阅读并不是最佳选择.然而,没有睡眠,我的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();
}
Run Code Online (Sandbox Code Playgroud)
对于多线程,当您不想消耗机器时,通常会将后台工作设置为较低的优先级。它将使用剩余的 CPU。这意味着您不应该关心它是否达到 100%。
但是,BackgroundWorker 的问题是您无法设置优先级。
另一种选择是生成您自己的线程,您可以在其上设置优先级。
这是另一篇相关的 SO 帖子:
此外,另一个(可能不太吸引人的)选择是将繁重的工作放入另一个进程中,并使其运行低优先级。如果您不需要传达大量进展,那就很简单。否则打开沟通渠道会更复杂。