Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Измерение времени выполнения..

24K
27 октября 2007 года
Delta_Q
26 / / 06.09.2007
Мне надо измерять скорость выполнения разных функций в программе и для этого таймера в милисекундах не хватает... т.е. нужно измерять в микросекундах или нано. Как это реализовать?
32K
27 октября 2007 года
Mikl_Wolf
5 / / 24.10.2007
используй функцию GetTickCount(). например
DWORD StartTime,EndTime;
StartTime=GetTickCount();
/*вызов функции*/
EndTime=GetTickCount();
int times=EndTime-StartTime;
24K
27 октября 2007 года
Delta_Q
26 / / 06.09.2007
Я так понимаю это число тиков процессора?
32K
28 октября 2007 года
Mikl_Wolf
5 / / 24.10.2007
вроде бы нет. скорее всего что это время, а не количество тиков. Я использовал эту функцию что бы решить подобную проблему в своей программе. Вот что пишут про нее:
GetTickCount
Описание

function GetTickCount: Longint;

Считывает вpемя, пpошедшее с момента запуска системы.
Возвpащаемое значение

Пpошедшее вpемя (в миллисекундах).
263
28 октября 2007 года
koltaviy
816 / / 16.12.2004
Цитата: Mikl_Wolf
вроде бы нет. скорее всего что это время, а не количество тиков. Я использовал эту функцию что бы решить подобную проблему в своей программе. Вот что пишут про нее:
GetTickCount
Описание

function GetTickCount: Longint;

Считывает вpемя, пpошедшее с момента запуска системы.
Возвpащаемое значение

Пpошедшее вpемя (в миллисекундах).


А теперь читаем пост аффтара еще раз (там где говорится про миллисекунды) :)
Может это "поможет":
http://rxlib.ru/forums/index.php?act=ST&f=3&t=370&

24K
28 октября 2007 года
Delta_Q
26 / / 06.09.2007
Ааа, нет это не подходит мне надо время меньше миллисекунд.
Потому, что цикл работы например сохранения в базе данных пишит что выполнен за 0 миллисекунд.
534
28 октября 2007 года
HarryAxe
448 / / 19.01.2006
Обсуждалось сотни раз.
Код:
LARGE_INTEGER freq;
    QueryPerformanceFrequency(&freq);

    LARGE_INTEGER time1;
    QueryPerformanceCounter(&time1);

    DoSomething();

    LARGE_INTEGER time2;
    QueryPerformanceCounter(&time2);
    time2.QuadPart -= time1.QuadPart;
    double span = (double) time2.QuadPart / freq.QuadPart;
350
29 октября 2007 года
cheburator
589 / / 01.06.2006
А как насчет потребления процессора самими этими функциями, насколько они быстры?
534
29 октября 2007 года
HarryAxe
448 / / 19.01.2006
Есть лишь один способ это выяснить.
5
29 октября 2007 года
hardcase
4.5K / / 09.08.2005
Элементарно выполнить функцию N раз и поделить общее время выполнения на N. Это и будет среднее время выполнения функции.
Естественно нужно учитывать один момент: функция (идеально) не должна давать побочных эффектов (в некоторых случаях кеширование - один из них).

Вычислить более менее точное время (+-100 нс) одного выполнения функции в наносекундах - не выйдет, нет таних функций.
398
29 октября 2007 года
Alexandoros
630 / / 21.10.2005
QueryPerformanceCounter работает через rdtsc - подсчет тиков проца. На процесоре 1Ггц получаем 10^-9 сек.(нано) Нужна большая точность - юзай встроеный асм. Но тебе хватит с головой и примера HarryAxe. Ни один запрос не сможет отработать за менее чем 1мкс.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог