Как измерить производительность в приложении C ++ (MFC)? - PullRequest
5 голосов
/ 30 сентября 2008

Какие хорошие профилировщики вы знаете?

Как можно измерить и настроить производительность приложения C ++ MFC?

Действительно ли необходим анализ алгоритмов? http://en.wikipedia.org/wiki/Algorithm_analysis

Ответы [ 10 ]

4 голосов
/ 30 сентября 2008

Я настоятельно рекомендую AQTime , если вы остаетесь на платформе Windows. Он поставляется с множеством профилировщиков, включая статический анализ кода, и работает с наиболее важными компиляторами и системами Windows, включая Visual C ++, .NET, Delphi, Borland C ++, Intel C ++ и даже gcc. И он интегрируется в Visual Studio, но также может использоваться автономно. Я люблю это.

2 голосов
/ 30 сентября 2008

Для Windows проверьте Xperf , который поставляется бесплатно вместе с Windows SDK. Он использует выбранный профиль, имеет полезный пользовательский интерфейс и не требует инструментов. Очень полезно для отслеживания проблем с производительностью. Вы можете ответить на такие вопросы, как:

Кто использует больше всего процессора? Разверните до имени функции, используя стеки вызовов. Кто выделяет больше всего памяти? Кто делает большинство запросов реестра? Диск пишет? и т.п. Вы будете очень удивлены, когда найдете узкие места, поскольку они, вероятно, не там, где вы ожидали!

2 голосов
/ 30 сентября 2008

Если вы (все еще) используете Visual C ++ 6.0, я предлагаю использовать встроенный профилировщик. Для более поздних версий вы можете попробовать Compuware DevPartner Performance Analysis Community Edition .

1 голос
/ 02 октября 2008

Я второй AQTime, в большинстве случаев с AQTime и Compuwares DevPartner. Причина в том, что AQTime будет профилировать любой исполняемый файл, имеющий допустимый файл PDB, тогда как TrueTime требует от вас выполнения инструментированной сборки. Это значительно ускоряет и упрощает специальное профилирование. DevPartner также немного дороже, если это проблема. DevPartner вступает в свои права с BoundsChecker, который я по-прежнему считаю лучшим инструментом для обнаружения утечек и перезаписей, чем AQTimes. TrueTime может быть немного более точным, чем AQTime, но я никогда не считал это проблемой.

Стоит ли профилировать, IMO, да, если вам нужно повысить производительность локального приложения. Я думаю, что вы также много узнаете о том, как на самом деле работают ваша программа и алгоритмы, и о финансовых последствиях использования определенных типов классов объектов для хранения и повторения ваших данных.

1 голос
/ 30 сентября 2008

Инструменты (например, точное время от DevPartner), которые позволяют видеть количество попаданий для исходных строк, позволяют быстро находить алгоритмы, которые имеют плохую сложность Big O. Вам еще нужно проанализировать алгоритм, чтобы определить, как уменьшить сложность.

1 голос
/ 30 сентября 2008

Intel Thread Checker через анализатор производительности Vtune. Проверьте это изображение, чтобы посмотреть, какое изображение я использую чаще всего. Это говорит о том, какая функция расходует большую часть моего времени.

alt text

Я могу дополнительно углубиться внутрь и разложить, какие функции внутри них съедают больше времени и т. Д. Существуют разные представления, основанные на том, что вы смотрите (общее время = время в fn + children), собственное время (время, потраченное только в коде работает внутри функции и т. д.).

Этот инструмент намного больше, чем профилирование, но я не изучил их все. Я определенно рекомендовал бы это. Инструмент также доступен для загрузки в виде полнофункциональной пробной версии, которая может работать в течение 30 дней. Если у вас есть ограничения по стоимости, я бы сказал, что это окно - все, что вам нужно, чтобы точно определить вашу проблему.

Пробная версия скачать здесь - https://registrationcenter.intel.com/RegCenter/AutoGen.aspx?ProductID=907&AccountID=&ProgramID=&RequestDt=&rm=EVAL&lang=

ps: я также играл с Rational Rational, но по какой-то причине я не особо к этому относился. Я подозреваю, что Rational может быть дороже, чем Intel.

1 голос
/ 30 сентября 2008

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

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

0 голосов
/ 30 сентября 2008

FYI, некоторые версии Visual Studio поставляются только с неоптимизирующим компилятором. Для одного из моих приложений MFC, если я скомпилирую его с помощью MINGW / MSYS (компилятор gcc) с -o3, оно будет работать примерно в 5-10 раз быстрее, чем мой релиз, скомпилированный с Visual Studio.

Например, у меня есть xml-компилятор openstreetmap, и требуется около 3 минут (скомпилированная версия gcc) для обработки xml-файла объемом 2,7 ГБ. Моя визуальная студийная компиляция того же кода занимает около 18 минут.

0 голосов
/ 30 сентября 2008

Некоторые версии Visual Studio 2005 (и, возможно, 2008) на самом деле идут с довольно хорошим профилировщиком производительности.
если он у вас есть, он должен быть доступен в меню инструментов
или вы можете найти способ открыть окно «Performance Explorer», чтобы начать новый сеанс производительности.
Ссылка на MSDN

0 голосов
/ 30 сентября 2008

Glowcode - очень хороший профилировщик (когда он работает). Он может подключаться к работающей программе и требует только файлы символов - вам не нужно перестраивать.

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