Доброго времени суток! Подскажите, пожалуйста, как измерить время работы процесса в С++? Конкретнее: хочу наиболее "чисто" сравнить время выполнения двух решений одной задачи на практике. Слышал что-то о GetProcessTimes(), но так и не разобрался. Просто если юзать clock(), то уж слишком большой разброс получается.
А что с
GetProcessTimes()
не так? Она возвращает два значенияlpKernelTime
иlpUserTime
— это время, проведённое программой в системных вызовах, и время, потраченное собственно на вычисления. Их надо просто сложить.Здесь сказано, как преобразовать результаты в
long long
: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683223.aspxЧтобы хорошо измерить время, нужно, чтобы компьютер не был нагружен другими задачами, а также запустить решение несколько раз и выбрать наименьшее из значений.
Вот тут мы спорили что лучше и чувак сделал бенчмаркинг с помощью функции winapi с говорящим названием QueryPerformanceCounter, уж не знаю насколько он точен, но время возвращается в микросекундах.
Просто для замера времени выполнения исполняемого файла (aka .exe) можно использовать внешние утилиты. Например runexe поддерживаемая в том числе MikeMirzayanov. Качаешь, запускаешь, получаешь чистое процессорное время.
Если хочешь именно вставить замер в своё решение: код открыт, так что можешь оттуда куски понавыдирать.
А некоторый разброс в любом случае будет. Процессор использует эвристики для оптимизаций и сработают ли они в тот или иной раз во многом зависит не от Вас.