среда, 14 апреля 2010 г.

Самый простой профайлер для Дельфи

Я тут озадачился вопросом - как бы так не напрягаясь и бесплатно поискать бутылочные горлышки в моих программах?

Известная истина - оптимизировать надо то, что имеет наибольший вес в оптимизируемом коде.

А как понять, что тормозит больше всего?

Самый простой вариант - использовать QueryPerformanceCounter перед и после вызова функции. Но функций много. Перед какой ставить-то?

Где бы взять хотя бы намек на то, какую бы функцию надо анализировать внимательно, а на какие можно забить?

Погуглив я нашел несколько семпловых профайлеров. Искал-то я просто профайлеры, но нашел именно семпловые.

Насколько я понял, такие профайлеры наблюдают за работой программы и периодически анализируют - какой конкретно код выполняется? И вот на основе частоты выполнения конкретного бинарного кода (семплов) профайлер делает вывод - какая же функция чаще всего выполняется и больше всего (как следствие) тормозит. Для нахождения имени функции используется отладочная информация, например, *.MAP файл проекта.
Добавлю - в программе не надо делать ни единого изменения - можно использовать обычный бинарник!!!

Я использовал http://delphitools.info/samplingprofiler. Он немного глючил у меня. Но в целом работал.

В итоге я нашел функции, которые тормозили больше всего. Самое удивительное, что это были не те функции, на которые я думал. В итоге я ускорил свой код (мат. вычисления экономической модели) в 2 раза (факт ускорения подтверждает замер времени до и после выполнения расчета)!!!

Всем успехов! Профайлеры - это не так страшно.