Use profiling, Luke
Thursday, 3 July 2008 13:50![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Каждый день в этом мире узнаешь что-то для себя новое. И нет воистину предела совершенству. В частности, ваш покорный слуга, который доселе считал себя в достаточной степени осведомлённым о средствах и инструментах для написания качественного сорса, дочитал-таки шедевральный труд Стива Макконнелла "Совершенный код". Где, в числе прочего, в нескольких абзацах автор упомянул про такое замечательное средство управления производительностью, как профилирование...
Я заинтересовался. Я дико заинтересовался. Я стал рыться в поисках достойного профайлера. Попутно к своему сожалению выяснил, что они все в подавляющем большинстве проприетарные, но это дело десятое. Не в этом дело. Прошло два часа и я добился своего... В пик экстаза меня вогнал откопанный на просторах Википедии AQtime...
Первый факт, от которого руки затряслись мелкой и жадной дрожью - список поддерживаемых сред программирования (и языков):
Однако окончательный восторг, разумеется, утвердился после установки профайлера...
(Иллюстрирую на CodeGear RAD Developer Studio 2007, для прочих - идентично.)
Вот обычное приложение, за пару минут написанное для выяснения временной разницы между for и for-in:

Один маленький правый клик, один маленький выбор, что именно мы собираемся профилировать: модуль, класс или отдельную функцию?

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

Запускаем, организовываем какую-то активность программы (в частности, я сделал 6 кликов мышки по окну), короче - всё как обычно. Программа благополучно завершилась, и...
Знакомьтесь, это - рапорт. Выглядит не очень впечатляюще, поскольку в демонстрационной программе был всего лишь один метод, и табличка вышла никакая. Но всё же... вы без труда можете представить себе серьёзный проект, в котором этих методов - много-много десятков.
Возможных характеристик для показа (столбиков в рапорте) - 28, включая 5 показанных по дефолту.
Также доступны красивые настройки альтернативного вида - не в числах, а графические.

Я заинтересовался. Я дико заинтересовался. Я стал рыться в поисках достойного профайлера. Попутно к своему сожалению выяснил, что они все в подавляющем большинстве проприетарные, но это дело десятое. Не в этом дело. Прошло два часа и я добился своего... В пик экстаза меня вогнал откопанный на просторах Википедии AQtime...
Первый факт, от которого руки затряслись мелкой и жадной дрожью - список поддерживаемых сред программирования (и языков):
- Visual Studio 2008
- Visual Studio 2005
- Visual Studio .NET (2002, 2003)
- Visual C++ (5, 6, 7)
- Visual Basic (6)
- Borland Developer Studio 2006
- Delphi (3, 4, 5, 6, 7, 8, 2005, 2006, 2007)
- C++Builder (3, 4, 5, 6, 2006, 2007)
- Borland C++ (4.5, 5.x)
- Intel C++ (7.0 and later)
- GCC
- Compaq Visual Fortran (6.5)
- Intel Fortran (9.0)
Однако окончательный восторг, разумеется, утвердился после установки профайлера...
(Иллюстрирую на CodeGear RAD Developer Studio 2007, для прочих - идентично.)
Вот обычное приложение, за пару минут написанное для выяснения временной разницы между for и for-in:
Один маленький правый клик, один маленький выбор, что именно мы собираемся профилировать: модуль, класс или отдельную функцию?
Можно также профилировать и весь проект, тогда в рапорт вдобавок к вашему коду добавится оценка ещё и всяческих системных вызовов WinApi.
Запускаем, организовываем какую-то активность программы (в частности, я сделал 6 кликов мышки по окну), короче - всё как обычно. Программа благополучно завершилась, и...
Знакомьтесь, это - рапорт. Выглядит не очень впечатляюще, поскольку в демонстрационной программе был всего лишь один метод, и табличка вышла никакая. Но всё же... вы без труда можете представить себе серьёзный проект, в котором этих методов - много-много десятков.
Возможных характеристик для показа (столбиков в рапорте) - 28, включая 5 показанных по дефолту.
Также доступны красивые настройки альтернативного вида - не в числах, а графические.
Переходим к окну кода... и здесь нас ожидает сюрприз :)
Как вы понимаете, характеристики слева тоже можно варьировать. В данном случае это Time и Hit Count.
Что ещё можно рассказать? К примеру, про дополнительные средства: дизассемблер, граф вызовов (для данного приложения состоит из одной вершины
Профилирование - это замер не только времени. В эту отрасль инструментов для разработчика входит целый десяток разнообразных средств для тестирования производительности вашей программы. И все их, разумеется, включает в себя AQtime
Так, пора закругляться с этим восторженным описанием. А то я скоро захламлю своими скринами весь ЖЖ, и бедным пользователям не останется места на серваке, чтобы писать слезливые лытдыбры)) В общем, информацию кто хотел - тот получил. А я пока что закругляюсь. И топаю оптимизировать свои наработки, благо теперь это составляет гораздо меньший труд
UPD: заюзан HTML, поправлены размеры картинок.