【问题标题】:Why does increasing timer resolution via timeBeginPeriod impact power consumption?为什么通过 timeBeginPeriod 增加计时器分辨率会影响功耗?
【发布时间】:2011-09-28 22:36:02
【问题描述】:

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

我在 Larry Osterman 的 MSDN 博客this entry 上发现了一个关于使用此功能的有趣警告:

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

总体而言,使用 timeBeginPeriod 是一个非常糟糕的主意 - 我们一直在积极地在 Windows 中删除它的所有用途,因为使用它会带来功耗后果。

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

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

【问题讨论】:

  • 顺便说一下,在“最佳”机器上,您不会得到超过 15.6 毫秒的时间。大多数情况下它将是 30 毫秒。不确定 HPET 是否有效果,所以要非常小心依赖 Windows 计时器。
  • Larry 知道,他写了那段代码。当然,不是每 1/64 秒,而是每毫秒将处理器从其 HLT 状态唤醒。效率降低 64 倍。没有人会调用 timeBeginPeriod(10)。

标签: c# winapi timer


【解决方案1】:

因为它会导致更多的 CPU 使用率。一个很好的解释是Timers, Timer Resolution, and Development of Efficient Code

【讨论】:

    【解决方案2】:

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

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

    但是从用户的角度来看,滥用定时器的程序可能会变得更加响应,即使是 WinXP 的操作系统,所以需要权衡。

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

    【讨论】:

    • 对电源使用有影响,主要是因为很多开发者不懂windows timer?那是什么?
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多