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,它看起来不太可能在我们的生命周期中翻转,除非它是硬件问题.
编辑:我们现在正在计算"每个线程"的值,然后"钳制它"以观察核心之间的跳转以重置它.