Что такое очень простой профилировщик C ++ (VC ++)? - PullRequest
14 голосов
/ 12 апреля 2010

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

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

Ответы [ 5 ]

24 голосов
/ 12 апреля 2010

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

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

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

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

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

12 голосов
/ 12 апреля 2010

VS встроено:

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


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

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


Создание собственного легко:

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

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

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

3 голосов
/ 13 апреля 2010

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

2 голосов
/ 13 апреля 2010

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

2 голосов
/ 12 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...