Environment.TickCount是否受系统时间调整的影响?

时间:2009-12-07 09:57:38

标签: .net base-class-library

我很好奇.NET BCL属性Environment.TickCount是如何实现的。特别是我现在想要受system time adjustments影响。

我对该属性如何实现的第一个猜测是,它只是GetTickCount method周围的托管包装器。但是,GetTickCount方法的文档声明受到GetSystemTimeAdjustment函数所做调整的影响,但Environment.TickCount的文档未提及有关时间调整的任何内容。

我正在试图弄清楚Environment.TickCount是否可以用作(虽然是低精度)持续增加的时间值。

2 个答案:

答案 0 :(得分:4)

不,Environment.TickCount不受系统时间调整的影响。这是我对文档的解释,但我的好奇心要求更难的证明,所以我在一小时来回调整系统时运行了以下代码:

while (true)
{
    Console.WriteLine(Environment.TickCount);
    Thread.Sleep(1000); 
}

...并且输出显示了一个完整的序列,不受时间调整的影响。

<强>更新
所以我做了一些更多的功课,由马库斯的问题在下面的评论中引发。我很确定(但无法确认)Environment.TickCount会调用GetTickCount,并在文档中提到以下内容:

  

GetTickCount的分辨率   功能仅限于分辨率   系统计时器,是   通常在10的范围内   毫秒到16毫秒。该   GetTickCount的分辨率   功能也受到影响   由...做出的调整   GetSystemTimeAdjustment函数。

因此,虽然它不受更改系统时间的影响,但似乎 会受到调用SetSystemTimeAdjustment引起的调整的影响。

答案 1 :(得分:2)

不,它不受系统时间调整的影响。

它是否适合“持续增加的时间价值”取决于您的确切要求。来自MSDN documentation

  

派生此属性的值   来自系统计时器并存储为   一个32位有符号整数。所以,   如果系统连续运行,   TickCount将从零增加到   大约Int32.MaxValue   24.9天,然后跳转到Int32.MinValue,这是一个   负数,然后递增   在接下来的24.9天内为零。