【发布时间】:2013-11-10 23:52:24
【问题描述】:
循环通过 QueryPerformanceCounter() 并保存值:
// Main loop for timer test
for ( int i = 0; i < ITERATIONS; i++ ) // ITERATIONS = 1000
{
QueryPerformanceCounter(&li);
time[i] = double(li.QuadPart) / PCFreq; //1,193,182 per second
}
//calculate the difference between each call
// and save in difference[]
for ( int j = 0; j < (ITERATIONS - 1) ; j++ )
{
difference[j] = time[j+1] - time[j];
}
(除以 PCFreq 得出每次通话之间的时间。)
高分辨率计时器/计数器应该正在工作,因为它没有返回默认频率 1000。
每个时间戳之间的平均时间为 11.990884 微秒(一千次时间戳调用)。
这似乎非常缓慢。
这个测试有缺陷吗?
或关于为什么它在 1.1Ghz Celeron 上报告如此缓慢的值的想法?
【问题讨论】:
-
您为什么不使用 QueryPerformanceFrequency 来验证报告的频率?你到底想在这里验证什么?看起来您只是在计算查询计数器所需的时间,然后进行一些数学运算。
-
@ctacke:我正在使用它(未显示)来获取 PCFreq; //1,193,182 每秒。是的,我对调用 QueryPerformanceCounter 的时间很感兴趣——这样我就可以准确地测量其他事情。 (+1)。
-
@ctacke:12微秒不是很长吗?
-
我不知道,那是每毫秒超过 80 次迭代。我必须查看该调用的去向,以及它是否必须转入内核,但目的是什么?您是否正在尝试解决实际问题?
-
@ctacke:嗯,我想知道 BSP 是否有问题......高精度时间戳调用速度很慢。我需要一个正确的设置,希望没有我要解决的实际问题,但这看起来很可疑。
标签: c++ c windows performance windows-ce