我正在寻找在Windows服务中使用System.Timers.Timer。我想知道他们是多么可靠和准确。特别是:
更新:感谢目前为止的答案。我希望得到我在原始问题中详述的三个问题的更具体的答案。
答案 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))值。这样,如果基于时间间隔而不是基于特定时间,您可以实现要多少的计算。从来没有遇到过这种方法的问题。