c# - Stopwatch.GetTimestamp() 在 linux 和 windows 上产生不同的结果
问题描述
我希望有人可以向我解释为什么下面的函数在 linux 和 windows 上会产生令人难以置信的不同结果。
如果我有这个小代码片段:
var elapsed = Stopwatch.GetTimestamp() / TimeSpan.TicksPerMillisecond;
Thread.Sleep(1001); // lets sleep for one second
var ts = Stopwatch.GetTimestamp() / TimeSpan.TicksPerMillisecond;
var result = ts - elapsed > 10000L // roughly 10 seconds
在 Windows 环境result
中是false
<-- 预期结果
但是在 linux 环境result
中是true
<-- 什么....为什么?
我读过 Stopwatch.GetTimestamp() 取决于处理器。但这似乎太过分了。
据我所知,GetTimestamp 在 Windows 和 Linux 上产生截然不同的值。
例如在我的情况下运行上面的代码
在 Windows 上Stopwatch.GetTimestamp()
产生的值大致在165100732
在 Linux 上Stopwatch.GetTimestamp()
产生的价值超过 200 倍,例如349232049523
所以我可以看到为什么result
不同,即在 Windows 上它记录了 1 秒的经过时间,但在 Linux 上记录了接近 100 秒的经过时间。所以那部分很好。
所以问题归结为为什么会Stopwatch.GetTimestamp()
在两种环境之间产生如此大不相同的数字?
解决方案
在进行了更多挖掘之后,我发现我在使用Stopwatch.GetTimestamp()
.
如下更新代码后,它开始表现一致。
var elapsed = Stopwatch.GetTimestamp() / (Stopwatch.Frequency / 1000);
Thread.Sleep(1001); // lets sleep for one second
var ts = Stopwatch.GetTimestamp() / (Stopwatch.Frequency / 1000);
var result = ts - elapsed > 10000L // roughly 10 seconds
答案是由于 Jens 对此答案的评论
推荐阅读
- react-native - 摆脱 React Native 中的底部 TextInput 栏
- angular - 可以在没有服务器(离线)的情况下运行 Angular 8 应用程序吗?
- node.js - 我们可以在所有同步或异步函数(NodeJS)中使用 try catch 吗?
- linux - 强制 sh shell 使用外部函数而不是内置函数
- continuous-integration - 使用 Lambda 函数的 AWS 代码管道
- c# - 简单的游戏如何让电脑先走?
- .net - Microsoft 对 .NET 中的 HEIF/HEIC 的支持?
- html - 如何对齐列表元素之间的空间
- html -
- c++ - 如果一个字符串在 C/C++ 中没有 NUL 字符会发生什么(以防编译器让它通过)?