logo
Языки программирования

3.7. Профилировщик

Часто говорят, что попытки улучшить эффективность программы вызывают больше ошибок, чем все другие причины. Этот вывод столь пессимистичен из-за того, что большинство попыток улучшения эффективности ни к чему хорошему не приводят или в лучшем случае позволяют добиться усовершен­ствований, которые несоразмерны затраченным усилиям. В этой книге мы обсудим относительную эффективность различных программных конструк­ций, но этой информацией стоит воспользоваться только при выполнении трех условий:

• Текущая эффективность программы неприемлема.

• Не существует лучшего способа улучшить эффективность. В общем слу­чае выбор более эффективного алгоритма даст лучший результат, чем по­пытка перепрограммировать существующий алгоритм (для примера см. раздел 6.5).

• Можно выявить причину неэффективности.

Чрезвычайно сложно обнаружить причину неэффективности без помощи измерительных средств. Дело в том, что временные интервалы, которые мы инстинктивно воспринимаем (секунды), и временные интервалы работы компьютера (микро- или наносекунды) отличаются на порядки. Функция, которая нам кажется сложной, возможно, оказывает несущественное влияние на общее время выполнения программы.

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

Даже с профилировщиком может оказаться трудно улучшить эффектив­ность программы. Одна из причин состоит в том, что большая часть времени выполнения тратится в получаемых извне компонентах программы, таких как базы данных или подсистемы работы с окнами, которые часто разрабатыва­ются больше по критериям гибкости, чем эффективности.