2010-11-17 73 views
0

在Windows上爲大量事件生成時間戳的最快方法是什麼?
毫秒的分辨率很好。在窗口下生成時間戳最便宜的方法

顯而易見的選項是GetLocalTime(),GetTickCount()甚至QueryPerformanceCounter()。
哪些(或某些其他候選)需要最少量的時鐘週期?

回答

0

最快的方法是使用x86指令RDTSC。它有幾個缺點,所以請閱讀文檔。如果你不喜歡內聯彙編,VS有一個固有的:__rdtsc()

1

QueryPerformanceCounter()和GetTickCount()將爲您提供從機器啓動以來所經過的時間量,並且不會直接產生時間戳。理論上,您可以存儲機器啓動的時間,並將這些時間用作偏移量以獲取當前時間,但我不確定這會有多準確。

如果毫秒級精度不是必需的,您還可以查看time()函數及其變體。它會以秒爲單位給你自紀元以來的時間。這應該是相當快的,並且可以以其原始格式存儲,直到您需要顯示或操作它。

如果性能是您最關心的問題,那麼您應該對您提出的每種備選方案進行分析(最有可能使用QueryPerformanceCounter)並讓它爲您做出決定。我還認爲時間戳函數的性能在大多數嚴重的應用程序中可能並不重要,因此可能首先關注應用程序中更復雜的部分。

+0

雖然不太可能,這些函數也可能在不同版本的Windows上有不同的性能。你需要測試你關心的每個版本。 – 2010-11-17 23:04:06

+0

定時計時功能聽起來很有趣。 :) – 2010-11-18 01:16:46