【发布时间】:2010-11-17 22:17:54
【问题描述】:
为 Windows 上的大量事件生成时间戳的最快方法是什么?
毫秒的分辨率很好。
显而易见的选项是 GetLocalTime()、GetTickCount() 甚至 QueryPerformanceCounter()。
其中哪一个(或其他一些候选人)需要最少的时钟周期?
【问题讨论】:
标签: windows performance timestamp
为 Windows 上的大量事件生成时间戳的最快方法是什么?
毫秒的分辨率很好。
显而易见的选项是 GetLocalTime()、GetTickCount() 甚至 QueryPerformanceCounter()。
其中哪一个(或其他一些候选人)需要最少的时钟周期?
【问题讨论】:
标签: windows performance timestamp
QueryPerformanceCounter() 和 GetTickCount() 将获得自机器启动以来经过的时间量,并且不会直接产生时间戳。从理论上讲,您可以存储机器启动的时间并将其用作偏移量来获取当前时间,但我不确定这将有多准确。
如果不需要毫秒精度,您还可以查看time() 函数及其变体。它将为您提供自纪元以来经过的时间(以秒为单位)。这应该非常快,并且可以以原始格式存储,直到您需要显示或操作它。
如果性能是您最关心的问题,那么您应该分析您想出的每个替代方案(最有可能使用 QueryPerformanceCounter)并让其为您决定。我还认为时间戳函数的性能在大多数严肃的应用程序中可能并不重要,因此可能首先关注应用程序中更复杂的部分。
【讨论】:
最快的方法是使用 x86 指令RDTSC。它有几个缺点,所以请阅读文档。如果你不喜欢内联汇编,VS 有它的内在特性:__rdtsc()
【讨论】: