如何获取.NET / C#中的滴答精度时间戳?

到目前为止,我一直使用DateTime.Now时间戳记,但是我注意到,如果您DateTime.Now循环打印,您会发现它以大约5%的离散跳跃递增。15毫秒 但是对于我的应用程序中的某些情况,我需要获得最准确的时间戳,最好是滴答(= 100 ns)精度。有任何想法吗?

更新:

显然,StopWatchQueryPerformanceCounter是要走的路,但是它只能用于测量时间,因此我在考虑DateTime.Now在应用程序启动时调用,然后才StopWatch运行,然后将经过的时间从添加到从StopWatch返回的初始值中DateTime.Now。至少那应该给我准确的相对时间戳,对吗?您如何看待(黑客)?

注意:

StopWatch.ElapsedTicks不同于StopWatch.Elapsed.Ticks!我使用前者假设1 tick = 100 ns,但在这种情况下1 tick = 1 / StopWatch.Frequency。因此,要获取等于DateTime的报价,请使用StopWatch.Elapsed.Ticks。我只是很难学到的。

笔记2:

使用StopWatch方法,我注意到它与实时不同步。大约10个小时后,它领先了5秒钟。因此,我想每个X都必须重新同步一次,其中X可能是1小时,30分钟,15分钟等。我不确定重新同步的最佳时间间隔是多少,因为每次重新同步都会改变偏移量,长达20毫秒。


慕神8447489
浏览 757回答 3
3回答

慕姐8265434

如果实际上(您的评论)真正关心的是一个唯一的时间戳,该时间戳以严格的升序分配,并且尽可能与系统时间相对应,则可以尝试以下替代方法:public class HiResDateTime{   private static long lastTimeStamp = DateTime.UtcNow.Ticks;   public static long UtcNowTicks   {       get       {           long orig, newval;           do           {               orig = lastTimeStamp;               long now = DateTime.UtcNow.Ticks;               newval = Math.Max(now, orig + 1);           } while (Interlocked.CompareExchange                        (ref lastTimeStamp, newval, orig) != orig);           return newval;       }   }}
打开App,查看更多内容
随时随地看视频慕课网APP