我有一个任务要反复执行。我想尽可能快地调用它,但是我想保持较低的 cpu 周期。我读过在 backgroundworker 中使用 Sleep 不是最佳选择。但是,如果不 sleep ,我的 CPU 会保持在 55% 左右。我在下面有一个我的来源的例子。如果 sleep 合适,您如何选择最佳 sleep 时间,正如您从下面的结果中看到的那样,我会根据 sleep 时间长短得出不同的结果。有人可以让我知道做类似事情时的最佳做法是什么吗
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();
}
最佳答案
对于多线程,当您不想消耗机器时,通常会将后台工作设置为较低的优先级。它将使用剩余的任何 CPU。这意味着您不应该关心它是否达到 100%。
但是,BackgroundWorker 的问题是您无法设置优先级。
另一种选择是生成您自己的线程,您可以为其设置优先级。
这是另一个相关的 SO 帖子:
.NET Backgroundworker Object's Thread Priority
此外,另一个(可能不太吸引人)选择是将繁重的工作放到另一个进程中,并使该进程的运行优先级较低。如果你不需要交流很多进展,那很简单。否则打开沟通 channel 会更复杂。
关于c# - Backgroundworker Sleep 以减少 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283386/