2009-05-22 74 views
4

我正在寻找在Windows服务中使用System.Timers.Timer。我想知道他们的可靠性和准确性。特别是:.net定时器有多可靠?

  1. 有没有保证他们会多久运行一次?
  2. 当处理器或内存过载时会发生什么?在这种情况下,ElapsedEventArgs.SignalTime总是准确吗?
  3. 如果计时器长时间运行,当系统时间进行更正以考虑系统时钟的不准确性时会发生什么情况?

更新:感谢迄今为止的答案。我希望对我在原始问题中详述的三个问题给出更具体的答案。

回答

0

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

+1

Thread.Sleep具有与标准计时器相同的分辨率限制,这意味着操作系统不保证其实时精度,因此同样的问题仍然存在,标准计时器或thread.sleep方法的精度是多少? – 2009-06-03 10:59:02

1

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

1

如果您在.NET中需要非常高性能的时钟,您应该查看System.Diagnostics.Stopwatch。它使用Windows中的内核定时器非常精确地测量时间。它通常用于诊断目的,比如测量给定代码片段的执行时间......但如果需要的话,它可能会被封装在定制事件的定制高性能Timer类中。

2

什么是准确的你? 正常的Windows定时器具有约100Hz的精确度。如果你想要更准确的东西,看看QueryPerformanceTimer(System.Diagnostics.Stopwatch使用它)。它对于短时间跨度来说非常精确,但是随着CPU频率的变化(电源管理),它会不同步。另外,我已经看到系统时钟漂移一分钟一天,因此我们必须安装NTP实用程序并安排它(反语)来定期运行。

基本上,我们从未在windows机器上达到亚毫秒的时间精度,即使有些尝试使用主时钟作为基准,并且使用QuerperformanceTimer作为差分定时器的种类。从来没有工作过。