Backgroundworker睡眠减少CPU

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)

bry*_*mac 1

对于多线程,当您不想消耗机器时,通常会将后台工作设置为较低的优先级。它将使用剩余的 CPU。这意味着您不应该关心它是否达到 100%。

但是,BackgroundWorker 的问题是您无法设置优先级。

另一种选择是生成您自己的线程,您可以在其上设置优先级。

这是另一篇相关的 SO 帖子:

.NETBackgroundworker对象的线程优先级

此外,另一个(可能不太吸引人的)选择是将繁重的工作放入另一个进程中,并使其运行低优先级。如果您不需要传达大量进展,那就很简单。否则打开沟通渠道会更复杂。

如何启动低优先级进程?C#