.net计时器有多可靠?

时间:2009-05-22 09:42:47

标签: .net timer

我正在寻找在Windows服务中使用System.Timers.Timer。我想知道他们是多么可靠和准确。特别是:

  1. 对于它们的运行频率有任何保证吗?
  2. 当处理器或内存过载时会发生什么?在这种情况下,ElapsedEventArgs.SignalTime总是准确吗?
  3. 如果计时器长时间运行,当对系统时间进行修正以考虑系统时钟的不准确时会发生什么?
  4. 更新:感谢目前为止的答案。我希望得到我在原始问题中详述的三个问题的更具体的答案。

4 个答案:

答案 0 :(得分:2)

什么对你准确? 普通的Windows计时器具有大约100Hz的准确度。如果您想要更准确的东西,请查看QueryPerformanceTimer(System.Diagnostics.Stopwatch使用它)。对于短时间跨度来说,它非常精确且非常准确,但随着CPU频率的变化(电源管理),它将会失去同步。

另外,我看到系统时钟漂移每天几分钟,所以我们必须安装NTP实用程序并安排它(具有讽刺意味)定期运行。

基本上,我们从未在Windows机器上实现亚毫秒时间的准确性,即使有些尝试使用主时钟作为基线而QuerperformanceTimer也是一种差分计时器。从来没有正常工作。

答案 1 :(得分:1)

根据我的经验,如果您的性能负载非常高,我可以告诉定时器可能会失去同步。

答案 2 :(得分:1)

如果您需要.NET中的高性能时钟,则应查看System.Diagnostics.Stopwatch。它使用windows中的内核计时器来非常精确地测量时间。它通常用于诊断目的,例如测量给定代码段的已用执行时间......但如果需要,它可能包含在定制事件的自定义高性能Timer类中。

答案 3 :(得分:0)

我在我的Windows服务任务的循环中使用sleep( Thread.Sleep(int))值。这样,如果基于时间间隔而不是基于特定时间,您可以实现要多少的计算。从来没有遇到过这种方法的问题。