3

我很好奇 .NET BCL 属性 Environment.TickCount 是如何实现的。如果它受到系统时间调整的影响,我特别想现在。

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

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

4

2 回答 2

4

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

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

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

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

GetTickCount 函数的分辨率受限于系统计时器的分辨率,通常在 10 毫秒到 16 毫秒的范围内。GetTickCount 函数的分辨率也受 GetSystemTimeAdjustment 函数所做的调整的影响。

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

于 2009-12-07T10:11:09.767 回答
2

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

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

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

于 2009-12-07T10:11:08.723 回答