我有一个任务,我想反复运行。我想尽可能快地调用它,但是我想保持低CPU周期。我已经阅读了在背景工作中使用睡眠不是最好的选择。然而,如果没有睡眠,我的CPU会保持55%左右。我有一个我的源代码示例如下。如果睡眠是适当的,你如何选择最佳睡眠时间,正如你从下面的结果中可以看到的,我根据我睡了多长时间得到不同的结果。有人可以让我知道什么最好的做法做类似Backgroundworker睡眠减少CPU
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分钟才能完成,所以我认为背景工作者会是更好的选择。 – poco
你为什么关心CPU%?如果你想确保系统的其他部分保持响应,也许把它放在优先级较低的线程上会更合适。 –