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

标签 .net base-class-library

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

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

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

最佳答案

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

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

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

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

The resolution of the GetTickCount function is limited to the resolution of the system timer, which is typically in the range of 10 milliseconds to 16 milliseconds. The resolution of the GetTickCount function is also affected by adjustments made by the GetSystemTimeAdjustment function.



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

关于.net - Environment.TickCount 是否受系统时间调整影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1858989/

相关文章:

c# - .NET 4.0 中的 CallerMemberName 不起作用

.net - 迭代 Queue<T> 是否保证按队列顺序?

.net - 如何衡量字符串的复杂度?

c# - 有什么方法可以将 .dll 文件转换为 .cs 文件

c# - 替换包含文件中随机数的字符串

c# - 为什么使用 Linq-to-Objects 进行排序会将项目与自身进行比较?

c# - 如何在 .NET 的单个单元测试中修改语言环境小数点分隔符?

c# - 使用 C# 创建嵌套的 json

c# - 安装 nuget 包 "same key has already been added."

c# - 使用 .NET 的内置类是否会带来显着的性能提升?