Sign in Join
Wiki copytemporary

Profiling/ru

English · Français · Русский

Профилирование в Википедии:

Профилирование и оптимизация

Профилирование служит для определения “критических” частей кода программы, оптимизация которых может серьезно улучшить общую производительность программы. Рекомендуется проводить профилирование на стадии подготовки к релизу, когда активное изменение проекта завершено или “заморожено”. Не имеет смысла тратить время на оптимизацию процедуры, которая, возможно, будет выброшена на следующий день в результате какой-нибудь переделки.

Также не следует увлекаться чрезмерной оптимизацией. Пара потраченных дней не стоят улучшения производительности на 2%. Приемлемый критерий - улучшение производительности на 30% за полчаса работы по оптимизации.

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

Поддержка профилирования в FreePascal

FreePascal имеет встроенную поддержку генерации исполняемых файлов, пригодных, по меньшей мере, для двух программ профилировани:

Профилирование памяти

Heaptrc, LineInfo

Для обнаружения утечек памяти просто соберите программу с ключом "-gh". Это равнозначно добавлению модуля heaptrc первым в список используемых модулей программы. Модуль встраивается в менеджер памяти fpc и производит различные проверки.

При использовании heaptrc совместно с ключом -gl (добавление отладочной информации о строках), можно получить информацию о том, какой код вызывал утечку.

Поведение модуля heaptrc можно контролировать с помощью переменной окружения HEAPTRC, которая может содержать следующие значения:

например:

HEAPTRC=log=c:\helloworld.trc

Модуль heaptrc можно использовать явно. Однако, он должен быть также первым модулем, подключаемым программой (файлом проекта в Lazarus-е). Если heaptrc используется явно, то вы уже не сможете скомпилировать программу с -gh, однако, использование -gl необходимо для получения информации о месте утечки.

Внимание: heaptrc конфликтует с модулем cmem. При необходимости отладки внешних библиотек следует использовать Valgrind.

Дополнительная информация о модуле heaptrc в документации на RTL (англ):

Heaptrc index

Переменная среда

Использование

Valgrind Memcheck

Модуль heaptrc может не обнаружить некоторые утечки. В состав valgrind входит утилита memcheck, которая осуществляет гораздо больше проверок и умеет обнаруживать больше разновидностей ошибок. Недостатком является низкая скорость работы, поэтому использовать memcheck рекомендуется только в случаях, когда heaptrc не помогает. Пример использования:

 valgrind --tool=memcheck --leak-check=summary --log-file=log.txt ./project1

Файл log.txt почти никогда не бывает пустым, т.к. проверяется не только собственно программа, но и все используемые ей библиотеки. Качество многих библиотек часто оставляет желать лучшего.

Еще больше информации можно получить с помощью команды:

 valgrind --tool=memcheck --leak-check=full --log-file=log.txt --show-reachable=yes --num-callers=50 ./project1


From the Free Pascal wiki, page "Profiling/ru", as it stood on 2017-11-19 after a change by FTurtle, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.