Stopwatch.GetTimestamp() 在 linux 和 windows 上产生了不同的结果

Stopwatch.GetTimestamp() produced different results on linux vs 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 环境中 resultfalse <-- 预期结果

但是在 linux 环境中 resulttrue <-- 什么....为什么?

我读到 Stopwatch.GetTimestamp() 取决于处理器。但这似乎过分了。

据我所知,GetTimestamp 在 Windows 和 Linux 上产生的值截然不同。

例如在我的例子中 运行 上面的代码

On Windows Stopwatch.GetTimestamp() 产生的值大致在 165100732

范围内

On 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 对此的评论 answer