我正在使用以下方法对STL容器矢量,deque,list,multiset和multimap进行一些操作。时序STL容器 - 多变?
PrecisionTimer::PrecisionTimer()
{
LARGE_INTEGER cps;
LARGE_INTEGER init_cnt;
QueryPerformanceCounter(&init_cnt);
QueryPerformanceFrequency(&cps);
start_count = init_cnt.QuadPart;
microseconds_per_count = 1000000.0/cps.QuadPart;
}
void PrecisionTimer::ReStart()
{
LARGE_INTEGER init_cnt;
QueryPerformanceCounter(&init_cnt);
start_count = init_cnt.QuadPart;
}
// in microseconds
unsigned int PrecisionTimer::ElaspedTime() const
{
LARGE_INTEGER cnt;
QueryPerformanceCounter(&cnt);
return (unsigned int)((cnt.QuadPart - start_count)
* microseconds_per_count + 0.5);
}
的方法很简单: 我有一个完整的列表框的字符串,将它们移动到一个载体中,然后从载体到STL容器添加元素。然后删除容器中的所有元素,并以微秒为单位接收所花费的时间。
我的问题是关于变化:有时我的审判是60,000+微秒不同于第一个。为什么?它与定时器实现有关吗?我已经指出了时间片和高速缓存的影响方向。任何人都可以详细说明吗? CPU使用率会影响它吗?
我并不是要求更好地实现计时器。我在问为什么它变化。
同样的原因,它需要一个小时的时间,时钟从周五下午4:55到下午5:00 - 外星人! – 2014-12-08 04:35:36
您是否正在编译优化?如果它没有副作用,你确定你正在计时的代码没有被优化吗?没有看到你正在运行的测试,很难猜测。 – 2014-12-08 04:49:54
计时测试是没有意义的,如果你正在运行一个未优化或“调试”版本。 – PaulMcKenzie 2014-12-08 05:04:50