Что такое очень простой профилировщик C++ (VC++)?

Я использовал несколько профилировщиков в прошлом и никогда не находил их особенно легкими. Может быть, я выбрал плохие, возможно, я действительно не знал, что я ожидал! Но я хотел бы знать, есть ли какие-нибудь "стандартные" профилировщики, которые просто заходят и работают? Я не верю, что мне нужны очень подробные подробные отчеты, просто чтобы выявить серьезные черные пятна. Простота использования для меня важнее на данном этапе.

Это VC++ 2008, который мы используем (лично я использую стандартную версию). Я не думаю, что в IDE есть какие-либо инструменты для этого, я не вижу ничего, глядя на основные меню?

6 ответов

Решение

VS построен в:

Если у вас есть командная версия, вы можете использовать профилировщик Visual Studio.


Другие опции:

В противном случае проверьте эту тему.


Создать свой легко:

Лично я использую внутреннюю версию, основанную на Win32 API QueryPerformanceCounter. Вы можете сделать что-то красивое и простое в использовании в пределах ста строк кода или меньше.

Процесс прост: создайте макрос в верхней части каждой функции, которую вы хотите профилировать, с именем PROFILE_FUNC() и которая добавит к внутренней статистике. Затем создайте другой макрос с именем PROFILE_DUMP(), который выведет выходные данные в текстовый документ.

PROFILE_FUNC() создает объект, который будет использовать RAII для записи количества времени, пока объект не будет уничтожен. И конструктор этого объекта RAII, и деструктор вызовут QueryPerformanceCounter, Вы также можете оставить эти строки в своем коде и контролировать поведение с помощью #define PROFILING_ON

Я предлагаю очень простой метод (который я выучил, прочитав Mike Dunlavey на SO):

Просто приостановите программу.

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

Если вы улучшите производительность этой функции на 50%, то вы просто улучшите общее время выполнения на 25%. И если вы обнаружите, что это даже не нужно вообще (я обнаружил несколько таких случаев за короткое время, когда я использовал этот метод), вы просто сократите время выполнения пополам.

Я должен признаться, что сначала я довольно скептически относился к эффективности этого подхода, но после попытки его в течение нескольких недель, я подсел.

Я всегда использовал AMD CodeAnalyst, я нахожу его довольно простым и дает интересные результаты. Я всегда использовал профиль, основанный на времени, в котором я обнаружил, что он хорошо взаимодействует с отладочной информацией моих приложений, что позволяет мне находить время, затрачиваемое на процедуры, инструкции C++ и уровень инструкций отдельной сборки.

Очень простой (и бесплатный) способ профилирования - установить отладчики Windows (cdb/windbg), установить bp на интересующее вас место и выпустить wt команда ("Отслеживание и просмотр данных"). Проверьте MSDN для получения дополнительной информации.

В прошлом я использовал lt prof для быстрого запуска своего приложения на C++. Он работает довольно легко и работает с скомпилированной программой, не требует и хуков исходного кода, или настроек. Я полагаю, что доступна пробная версия.

Еще один очень простой и полезный рабочий процесс профилирования, который работает на любых языках программирования, — это комментирование блоков кода. Закомментировав их все, раскомментируйте некоторые из них и запустите программу, чтобы увидеть производительность. Если ваша программа начинает работать очень медленно, когда какой-то код был раскомментирован, то вы, вероятно, захотите проверить там производительность.

Другие вопросы по тегам