Я тут озадачился вопросом - как бы так не напрягаясь и бесплатно поискать бутылочные горлышки в моих программах?
Известная истина - оптимизировать надо то, что имеет наибольший вес в оптимизируемом коде.
А как понять, что тормозит больше всего?
Самый простой вариант - использовать QueryPerformanceCounter перед и после вызова функции. Но функций много. Перед какой ставить-то?
Где бы взять хотя бы намек на то, какую бы функцию надо анализировать внимательно, а на какие можно забить?
Погуглив я нашел несколько семпловых профайлеров. Искал-то я просто профайлеры, но нашел именно семпловые.
Насколько я понял, такие профайлеры наблюдают за работой программы и периодически анализируют - какой конкретно код выполняется? И вот на основе частоты выполнения конкретного бинарного кода (семплов) профайлер делает вывод - какая же функция чаще всего выполняется и больше всего (как следствие) тормозит. Для нахождения имени функции используется отладочная информация, например, *.MAP файл проекта.
Добавлю - в программе не надо делать ни единого изменения - можно использовать обычный бинарник!!!
Я использовал http://delphitools.info/samplingprofiler. Он немного глючил у меня. Но в целом работал.
В итоге я нашел функции, которые тормозили больше всего. Самое удивительное, что это были не те функции, на которые я думал. В итоге я ускорил свой код (мат. вычисления экономической модели) в 2 раза (факт ускорения подтверждает замер времени до и после выполнения расчета)!!!
Всем успехов! Профайлеры - это не так страшно.
среда, 14 апреля 2010 г.
Самый простой профайлер для Дельфи
на
23:34
0
коммент.
Ярлыки: delphi
Подписаться на:
Сообщения (Atom)