在使用 Stopwatch.GetTimestamp() 时,我们发现如果您记录返回值,然后继续调用它并与之前的返回值进行比较,它最终会但不可预测地返回一个小于原始值的值。
这是预期的行为吗?
在生产代码中这样做的目的是获得微秒精确的系统时间。
该技术涉及调用 DateTime.UtcNow 并分别调用 Stopwatch.GetTimestamp() 作为 originalUtcNow 和 originalTimestamp。
从那时起,应用程序只需调用 Stopwatch.GetTimestamp() 并使用 Stopwatch.Frequency 计算与 originalTimestamp 变量的差异,然后将该差异添加到 originalUtcNow。
然后,瞧……一个高效且准确的微秒 DateTime。
但是,我们发现有时 Stopwatch.GetTimestamp() 会返回较小的数字。
它很少发生。我们的想法是在这种情况发生时简单地“重置”并继续。
然而,这让我们怀疑 Stopwatch.GetTimestamp() 的准确性或怀疑 .Net 库中存在错误。
如果你能对此有所了解,请做。
仅供参考,根据当前的时间戳值、频率和 long.MaxValue,除非是硬件问题,否则它似乎不太可能在我们的生命周期内翻转。
编辑:我们现在“每个线程”计算这个值,然后“钳制它”以观察内核之间的跳转以重置它。