Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как провести benchmark?


Автор: BCworm 25.9.2009, 09:50
Привет всем.
Подскажите пожалуйста чем можно провести бенчмарк - т.е чем можно замерить время выполнения программы в зависимости от объема данных? Может есть какие функции чтоб можно было вставить в код?
Может есть какие проги специально под делфи?

Автор: RockClimber 25.9.2009, 11:54
Я использую http://www.google.ru/search?q=GetTickCount&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru для измерения времени выполнения какого-либо действия. Мне хватает.

Автор: AntonN 25.9.2009, 12:18
Использовать QueryPerformanceCounter(), дающий более точные результаты.
Код

var Divisor:Int64; T1,T2:Int64; TotalTime:Extended;
begin
if QueryPerformanceFrequency( Divisor ) then begin
    QueryPerformanceCounter(T2);

    //делам мега сложные расчеты

    QueryPerformanceCounter(T1);
    TotalTime:=(T1-T2)/Divisor ;
end;

Автор: kami 25.9.2009, 21:45
AQTime.
Позволяет замерять много чего, в том числе и время выполнения функций. Из минусов - платная.

Автор: BCworm 11.10.2009, 09:22
Предложенный AntonN вариант  - QueryPerformanceCounter() Это именно то что надо. Получилось работает! в смысле показания меняются в зависимости от загрузки при желании можно и график построить НО! Насколько я понял счет ведется не в сек и м.сек. 
А в чем? У меня получаются значения типа 0.0014562349882 Как это превратить в миллисекунды? Или это ни и есть?

Подскажите пожалуйста.

Автор: AntonN 11.10.2009, 11:54
BCworm, это результат в секундах smile
чтобы перевести в миллисекунды умнож на 1000

Автор: BCworm 11.10.2009, 13:25
Ясно спасибо большое вопрос закрыт!

Автор: bems 11.10.2009, 17:21
Вот еще профайлер - довольно древний, но официально безплатный. С новыми делфями подглючивает при интеграции в среду, но ничего не мешает запускать его вручную как простое приложение.


Автор: Beltar 11.10.2009, 21:00
Небольшая статья на тему оптимизации: http://www.rsdn.ru/article/philosophy/Optimization.xml

ИМХО в ряде практически важных случаев, когда пользователь дает команду и ждет ее результатов, а время выполнения намного больше одной секунды миллисекунды мерить смысла нету, хватит и обычной Now. Кроме того, не всегда можно сразу понять, куда производительность уходит, у меня был случай, когда один и тот же код откомпилированный в Delphi 2007 давал ЕМНИП 27-28 секунд, а в Delphi 2009 аж 42 секунды (анализ с отчетом в Excel примерно 207000 записей в БД). Все время уходило на поиск полей по имени и "преимущества" юникода проявлялись во всей красе. После нудного переписывания на обращения по индексам время выполнения сравнялось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)