Stopwatch.Gettimestamp会不会翻身?还是回滚?

Way*_*yne 6 .net c# timestamp rollover stopwatch

在使用Stopwatch.GetTimestamp()时,我们发现如果你记录返回值,然后继续调用它并与之前的返回值进行比较,它最终会不可预测地返回一个小于原始值的值.

这是预期的行为吗?

在生产代码中执行此操作的目的是具有微秒精确的系统时间.

该技术涉及调用DateTime.UtcNow并分别调用Stopwatch.GetTimestamp()作为originalUtcNow和originalTimestamp.

从那时起,应用程序只需调用Stopwatch.GetTimestamp()并使用Stopwatch.Frequency计算与originalTimestamp变量的差异,然后将该差异添加到originalUtcNow.

然后,Voila ......一个高效准确的微秒DateTime.

但是,我们发现有时Stopwatch.GetTimestamp()将返回较低的数字.

它很少发生.我们的想法是在发生这种情况时简单地"重置"并继续.

但是,它让我们怀疑Stopwatch.GetTimestamp()的准确性,或者怀疑.Net库中存在一个错误.

如果你能对此有所了解,请做.

仅供参考,基于当前时间戳值,频率和long.MaxValue,它看起来不太可能在我们的生命周期中翻转,除非它是硬件问题.

编辑:我们现在正在计算"每个线程"的值,然后"钳制它"以观察核心之间的跳转以重置它.

500*_*ror 6

由于您的线程正在跳跃核心,因此您可能会获得跳跃.请参阅此页面上的"注释":http://msdn.microsoft.com/en-us/library/ebf7z0sw.aspx