Я использую следующий метод для выполнения некоторых операций с контейнерами 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);
}
Процесс просто: У меня есть ListBox полный строк, переместить их в вектор, а затем добавить элементы из вектора в контейнер STL. Затем я удаляю все элементы из контейнера и получаю время, затраченное на микросекунды.
Мой вопрос касательно вариации: Иногда моя пробная версия составляет 60 000+ микросекунд, отличную от первой. Зачем? Это связано с реализацией таймера? Я указал в сторону эффектов тайм-рейка и кэша высокой речевой речи. Может ли кто-нибудь уточнить это? Использует ли использование ЦП?
Я не прошу улучшить реализацию таймера. Я спрашиваю, почему это меняется.
По той же причине требуется час для часы идут с 16:55 до 17:00 в пятницу - инопланетяне! –
Собираетесь ли вы с оптимизацией? Вы уверены, что код, который вы используете, не оптимизирован, если у него нет побочных эффектов? Не видя тестов, которые вы запускаете, довольно сложно догадаться. –
Ваши тесты времени бессмысленны, если вы используете неоптимизированную или «отладочную» сборку. – PaulMcKenzie