【发布时间】:2010-11-27 19:38:37
【问题描述】:
到目前为止,我使用DateTime.Now 来获取时间戳,但我注意到如果你在循环中打印DateTime.Now,你会看到它以大约 10 的离散跳跃递增。 15 毫秒。但是对于我的应用程序中的某些场景,我需要尽可能获得最准确的时间戳,最好是刻度(= 100 ns)精度。有任何想法吗?
更新:
显然,StopWatch / QueryPerformanceCounter 是要走的路,但它只能用来测量时间,所以我想在应用程序启动时调用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:
使用秒表方法时,我注意到它与实时不同步。大约10个小时后,它领先了5秒。所以我想人们必须每隔 X 左右重新同步一次,其中 X 可能是 1 小时、30 分钟、15 分钟等。我不确定重新同步的最佳时间跨度是多少,因为每次重新同步都会改变偏移量长达 20 毫秒。
【问题讨论】:
-
当然,服务器上设置的日期/时间不能保证精确到 100ns,所以我不确定拥有“准确”时间戳有什么用(因为它的准确性只会是服务器的)?
-
我需要对准确性非常重要的实时财务数据进行计时。
-
显然,我喜欢你的 hack。 :) 但是为什么财务数据需要精确到 100ns?如果您要对写入数据库的数据进行时间戳记,我可以理解这一点,并且您需要区分具有完全相同时间戳值的行。
-
我正在执行需要这种精度的计算。看到顺序发生的交易时间戳具有相同的时间戳,而实际上您知道它们并非在完全相同的时间发生,这也让人感觉不对。