在深入研究VBA benchmarking(see also)后,我对这些答案的详细信息不满意。从Go中类似的question about timing,我看到测量绝对时间和时间变化之间存在差异。对于绝对时间,应使用“挂钟”,可以使用网络时间协议在机器之间同步,例如
同时应使用“Monatonic Clocks”来测量时间差异,因为它们不受闰秒或(根据相关的回答)时钟频率的变化。
我做对了吗?还有什么需要考虑的吗? 假设这些定义是正确的,这些时钟属于哪个类别,或者换句话说,这些时钟中的哪一个将为我提供最准确的时间变化测量:
Time
Timer
GetTickCount
GetSystemTimePreciseAsFileTime
QueryPerformanceFrequency
+ QueryPerformanceCounter
还是别的什么?
我可能会忽视其他方法。我说这是因为有些语言如Java get time in nanoseconds而不是微秒,这怎么可能?当然,Windows Api将利用最精确的硬件计时器,它可以提供微秒级的分辨率。什么是Java,我可以复制它吗?
PS,我不知道如何标记,请按您的意愿添加
答案 0 :(得分:0)
QueryPerformanceFrequency
和QueryPerformanceCounter
将为您提供最高分辨率的计时器。它们基本上包装了rtdsc
指令,该指令计算经过的CPU周期。