我正在使用以下方法對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