为什么通过timeBeginPeriod增加定时器分辨率会影响功耗?

我目前正在C#中编写一个应用程序,我需要大约启动一个计时器。 每5毫秒。 从一些研究看来,最好的方法是p /调用timeBeginPeriod(…)来改变系统计时器的分辨率。 它在我的示例代码中运行良好。

我在这篇文章中发现了一个关于在Larry Osterman的MSDN博客上使用这个function的有趣警告:

Adam:调用timeBeginPeriod也可以提高GetTickCount的准确性。

一般来说,使用timeBeginPeriod是一个非常糟糕的想法 – 我们一直在积极地删除它在Windows中的所有用途,因为使用它会带来功耗的后果。

有更好的方法可以确保您的线程及时运行。

有没有人确切知道为什么会发生这种情况,或者那些“更好的方法”(在线程中未指明)可能是什么? 我们谈论了多少额外的功耗?

因为它会导致更多的CPU使用率。 一个很好的解释是定时器,定时器分辨率和高效代码的开发 。

更改系统计时器分辨率确实会影响功耗,主要是因为许多开发人员不了解Windows计时器。 您会看到许多代码的睡眠或计时器值小于15毫秒。 它还会更改系统任务的行为,从而导致更多的电量使用。

突然将系统定时器更改为1ms所有这些仅每15ms唤醒的代码开始更频繁地唤醒,并且CPU使用率上升。

然而,从用户的角度来看,滥用定时器的程序可以变得更加响应,甚至是WinXP中的操作系统,因此需要权衡。

我有一个小程序可以更改系统计时器,因此您可以自己试验和测试电源使用情况。 http://www.lucashale.com/timer-resolution/还提供了许多链接和更多背景信息。