比GetSystemTime更快的东西?

时间:2010-09-22 10:12:13

标签: windows visual-c++ winapi

我正在使用visual c ++编写一个DDE日志记录小程序,每分钟记录几百个事件,我需要一种更快的方法来保持时间,而不是在winapi中调用GetSystemTime。你有什么想法吗?

(问这个是因为在加载测试中,所有异常都是由对getsystemtime的调用引起的)

5 个答案:

答案 0 :(得分:3)

在高用户模式可读地址处有一个名为mostly undocumentedUSER_SHARED_DATA结构,其中包含时间和其他全局内容,但GetSystemTime只是从那里提取时间并调用RtlTimeToTimeFields所以你没有多少可以直接使用结构获得。

答案 1 :(得分:1)

可能是疯狂的想法:你肯定需要一个准确的时间戳吗?假设你只有系统时间说每10次呼叫 - 这有多糟糕?

答案 2 :(得分:1)

根据你的意见;每次调用GetSystemDateFormatGetSystemTimeFormat 都会浪费时间。这些值不太可能发生变化,因此可以轻松缓存这些值以提高性能。我想(没有实际测试过)这两个调用比调用GetSystemTime要费时更多。

答案 3 :(得分:0)

首先,找出你的代码抛出异常的原因(假设你已经正确描述了它:即抛出了一个真正的异常,并且应用程序下降到内核模式 - 这真的很慢btw。)

那么你很可能会解决任何性能瓶颈。

Chris J。

答案 4 :(得分:0)

首先,我能想到的最快的方法是使用RDTSC指令。 RDTSC是英特尔时间戳计数器指令,具有纳秒精度。将其与CPUID指令结合使用。要正确使用这些说明,您可以阅读“Using the RDTSC Instruction for Performance Monitoring”,然后您可以将纳秒转换为秒。

其次,考虑使用QueryPerformanceFrequency()和QueryPerformanceCounter()。

第三,不是最快但比标准GetSystemTime()快得多,也就是说,使用timeGetTime()。