Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Сравнение двух функций


Автор: MIX55 3.4.2007, 11:21
Есть две функции поиска подстроки в строке (предположим Function_1 и Function_2). Вопрос в следующем: как установить какая из функции "быстрее работает"?


Автор: Rennigth 3.4.2007, 11:25
Дайтека подумать... вызвать раз так 100000 в цыкле каждую из них + GetTickCount.

Добавлено через 31 секунду
В чем может быть проблема?

Автор: Yanis 3.4.2007, 14:43
MIX55
Для определения скорости работы функции надо проводить испытания.
Если попробовать разобраться в значении слова «Испытание», то можно наткнуться на понимае этого термина в теории вероятности.
Не сложно догадаться, что чем больше испытаний мы произведём для одной и другой функции, тем правдивость утверждения о скорости р аботы той или иной функции увеличивается.

Добавлено @ 14:44
Кратко и лаконично мои слова подтверждаются словами Rennigth:
Цитата(Rennigth @  3.4.2007,  12:25 Найти цитируемый пост)
Дайтека подумать... вызвать раз так 100000 в цыкле каждую из них + GetTickCount.


Автор: ivan219 3.4.2007, 16:00
Поищи здесь -> http://forum.vingrad.ru/topic-21411.html

Добавлено через 8 минут и 40 секунд
http://vingrad.ru/DELPHI-ART-002245

Автор: MIX55 3.4.2007, 16:14
Цитата

чем больше испытаний мы произведём для одной и другой функции, тем правдивость утверждения о скорости работы той или иной функции увеличивается.

в том то и вопрос.
Один из вариантов предложенный Rennigth хорошо. Но из одного из этого нельзя сделать вывод что Function_2 работает быстрее(медленнее) Function_2. 

Автор: Sunvas 3.4.2007, 16:32
А исходного кода функций разве нет?

Автор: Yanis 3.4.2007, 16:58
Цитата(MIX55 @  3.4.2007,  17:14 Найти цитируемый пост)
Но из одного из этого нельзя сделать вывод что Function_2 работает быстрее(медленнее) Function_2

Почему?

Автор: Alexeis 3.4.2007, 18:33
Цитата(Yanis @  3.4.2007,  16:58 Найти цитируемый пост)
Почему? 

Потому, что есть такая вещь как кэширование. Второй и последующий запуски могут производиться намного быстрее первого. Если уж так делать, то нужно подставлять совершенно разные данные.

Автор: remax 4.4.2007, 13:47
Если разница во времени исполнения этих функций  незначительная, то, безусловно, вопрос становится чисто риторическим и на результат тестирования будет влиять и кеш и направление ветра. Но, если речь идет о 10-15% (и больше), то ничего проще и эффективнее чем  предложил Rennigth, просто нет. Конечно, можно попробывать оценить скорость выполнения этих функций исходя из теоретических подходов, например, все знают, что сложение - быстрее, чем умножение, а целочисленные операции быстрее вещественных. Однако, использование такого подхода, на мой взгляд, малоэффективно и ненадежно.

Добавлено через 7 минут и 57 секунд
Цитата(Alexeis @ 3.4.2007,  15:33)
Цитата(Yanis @  3.4.2007,  16:58 Найти цитируемый пост)
Почему? 

Потому, что есть такая вещь как кэширование. Второй и последующий запуски могут производиться намного быстрее первого. Если уж так делать, то нужно подставлять совершенно разные данные.

Ага, только кэширование относится в первую очередь к коду программы, а не к данным, поэтому, подстановка совершенно разных данных особого смысла не имеет. Хотя, ничего сложного в разных данных нет - Random нам поможет и в цикле!

А вообще, если серьезно, вопросы быстродействия, построения эффективных программ и т.д. и т.п. - очень важны и не тривиальны.  Тестирование - не менее важная и сложная тема. И, к сожалению, нет готовых универсальных решений - в каждом конкретном случае необходимо учитывать конкретную специфику.  

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