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

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

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

14
задан Mr. Boy 12 April 2010 в 19:11
поделиться

5 ответов

Встроенные средства VS:

Если у вас есть team edition, вы можете использовать Visual Studio profiler.


Другие варианты:

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


Легко создать свой собственный:

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

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

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

12
ответ дан 1 December 2019 в 06:43
поделиться

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

2
ответ дан 1 December 2019 в 06:43
поделиться

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

2
ответ дан 1 December 2019 в 06:43
поделиться

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

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

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

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

Должен признаться, что сначала я довольно скептически относился к эффективности этого подхода, но, попробовав его пару недель, меня зацепило.

24
ответ дан 1 December 2019 в 06:43
поделиться

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

3
ответ дан 1 December 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: