到目前为止,我一直使用DateTime.Now时间戳记,但是我注意到,如果您DateTime.Now循环打印,您会发现它以大约5%的离散跳跃递增。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:使用StopWatch方法,我注意到它与实时不同步。大约10个小时后,它领先了5秒钟。因此,我想每个X都必须重新同步一次,其中X可能是1小时,30分钟,15分钟等。我不确定重新同步的最佳时间间隔是多少,因为每次重新同步都会改变偏移量,长达20毫秒。
3 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
如果实际上(您的评论)真正关心的是一个唯一的时间戳,该时间戳以严格的升序分配,并且尽可能与系统时间相对应,则可以尝试以下替代方法:
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;
}
}
}
- 3 回答
- 0 关注
- 752 浏览
添加回答
举报
0/150
提交
取消