我正在使用visual c ++编写一个DDE日志记录小程序,每分钟记录几百个事件,我需要一种更快的方法来保持时间,而不是在winapi中调用GetSystemTime。你有什么想法吗?
(问这个是因为在加载测试中,所有异常都是由对getsystemtime的调用引起的)
答案 0 :(得分:3)
在高用户模式可读地址处有一个名为mostly undocumented的USER_SHARED_DATA结构,其中包含时间和其他全局内容,但GetSystemTime只是从那里提取时间并调用RtlTimeToTimeFields所以你没有多少可以直接使用结构获得。
答案 1 :(得分:1)
可能是疯狂的想法:你肯定需要一个准确的时间戳吗?假设你只有系统时间说每10次呼叫 - 这有多糟糕?
答案 2 :(得分:1)
根据你的意见;每次调用GetSystemDateFormat
和GetSystemTimeFormat
都会浪费时间。这些值不太可能发生变化,因此可以轻松缓存这些值以提高性能。我想(没有实际测试过)这两个调用比调用GetSystemTime
要费时更多。
答案 3 :(得分:0)
首先,找出你的代码抛出异常的原因(假设你已经正确描述了它:即抛出了一个真正的异常,并且应用程序下降到内核模式 - 这真的很慢btw。)
那么你很可能会解决任何性能瓶颈。
Chris J。
答案 4 :(得分:0)
首先,我能想到的最快的方法是使用RDTSC指令。 RDTSC是英特尔时间戳计数器指令,具有纳秒精度。将其与CPUID指令结合使用。要正确使用这些说明,您可以阅读“Using the RDTSC Instruction for Performance Monitoring”,然后您可以将纳秒转换为秒。
其次,考虑使用QueryPerformanceFrequency()和QueryPerformanceCounter()。
第三,不是最快但比标准GetSystemTime()快得多,也就是说,使用timeGetTime()。