Книга: Язык программирования Euphoria. Справочное руководство

3.2 Профилирование

3.2 Профилирование

Профилирование включается командой with profile (DOS32, WIN32, Linux, FreeBSD) или командой with profile_time (только DOS32). В результате профилирования вашей программы вы получите специальную её распечатку, которая называется профиль и которая по окончании работы программы вырабатывается интерпретатором и записывается в специальном файле листинга ex.pro. Файл листинга располагается в текущем каталоге.

Имеется два режима профилирования: по счётчику, и по времени. Первый режим, по счётчику, работает, когда вы пишете with profile. Второй режим, по времени, работает, когда вы пишете with profile_time. Вы не можете смешивать эти два режима в единственном прогоне своей программы. Чтобы получить оба профиля, вам потребуется два отдельных её прогона.

Мы осуществили прогон нашей программы sieve8k.ex (программа проверки производительности из каталога demobench) и в том, и в другом режиме профилирования. Результаты можно видеть в файлах sieve8k.pro (по счётчику) и sieve8k.pro2 (по времени).

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

Профилирование по времени (только для DOS32) показывет приближённую оценку процента общего времени, израсходованного программой на выполнение каждой команды. Если команда ни разу не попала в выборку, поле для записи процента времени останется пустым. Если вы видите в этом поле 0.00, это означает, что команда в выборку попадала, но процент времени, затраченный на её выполнение, не достигает 0.01.

В файл листинга попадут только те команды, которые откомпилированы после записи with profile или with profile_time. Обычно вы будете указывать with profile или with profile_time в самом начале вашего главного файла .ex, чтобы получить в листинге полный отчёт по всем командам. В редакторе Euphoria этот файл имеет раскрашенный синтаксис.

Профилирование может во многом помочь вам отполировать вашу программу до блеска:

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

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

* может снабдить вас статистикой по входным данным

* покажет вам, какие участки кода никогда не были даже проверены - не пускайте ваших пользователей впереди себя в очереди за такой пикантной новостью!

Иногда вы захотите сосредоточить своё внимание на детальном разборе определённого действия, выполняемого вашей программой. Например, в игре Language War мы обнаружили, что игра, в общем-то достаточно быстрая, сильно тормозится во время отображения взрыва планеты, разбрасывая 2500 пикселов по всем возможным направлениям. Мы решили, что неплохо было бы разогнать подпрограмму взрыва. Нас не заботил остальной код, так как там скорость была вполне сносной. Мы дали команду profile(0) в самом начале игры, сразу после метакоманды with profile_time, чтобы остановить профилирование, а затем мы вставили команду profile(1) в начале подпрограммы взрыва и команду profile(0) в конце этой подпрограммы. Таким образом, мы могли исполнять игру, создавая многочисленные взрывы и журналируя множество выборок исключительно по эффекту взрыва. Если выборки изменялись и по другим подпрограммам более низкого уровня, мы знали, что те выборки были взяты во время взрыва. Если бы мы просто отслеживали профиль для целой программы, картина не была бы слишком ясной, так как подпрограммы более низкого уровня также использовались для передвижения кораблей, рисования трасс фазоров и т.д. Команда profile() может помочь точно таким же манером, когда вы производите и профилирование по счётчику.

Оглавление книги


Генерация: 0.064. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз