我很好奇.NET BCL属性Environment.TickCount是如何实现的。特别是我现在想要受system time adjustments影响。
我对该属性如何实现的第一个猜测是,它只是GetTickCount method周围的托管包装器。但是,GetTickCount方法的文档声明受到GetSystemTimeAdjustment函数所做调整的影响,但Environment.TickCount的文档未提及有关时间调整的任何内容。
我正在试图弄清楚Environment.TickCount是否可以用作(虽然是低精度)持续增加的时间值。
答案 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天内为零。