Создание пользовательских счетчиков производительности в Visual C ++ - PullRequest
5 голосов
/ 11 сентября 2008

Кто-нибудь знает способ создания пользовательских счетчиков производительности с использованием обычного неуправляемого Visual C ++?

Я знаю, что это легко сделать с помощью управляемого C ++, но мне нужно сделать это с помощью неуправляемой службы Windows.

Я также знаю, что вы можете получать данные счетчиков производительности, но мне нужно создать некоторые пользовательские счетчики и увеличивать их во время выполнения приложений.

Ответы [ 4 ]

6 голосов
/ 02 июня 2015

Поддержка добавления счетчиков производительности C ++ изменена в Vista и более поздних версиях. Подход Performance DLL, предложенный в другом ответе, все еще работает, но новый метод, описанный здесь , проще в использовании.

В этом подходе вы пишете манифест, который описывает ваши счетчики, запускаете CTRPP, инструмент, который генерирует код из вашего манифеста. Скомпилируйте и свяжите этот код с вашим приложением, добавьте вызов для инициализации процесса (он запускает фоновый поток) и добавьте код для обновления счетчиков по мере необходимости. Детали публикации счетчиков обрабатываются фоновым потоком, выполняющим сгенерированный код.

Вам также нужно запустить lodctr / m: [файл манифеста], чтобы зарегистрировать ваши счетчики, прежде чем их можно будет использовать. Это должно быть запущено от имени администратора.

Кстати: другая программа, unlodctr, отменяет действие lodctr и должна использоваться, если вы вносите какие-либо изменения в свои счетчики, поскольку нет операции «заменить», только удалите старую, а затем установите новую.

Документация для всего вышеперечисленного просто ужасна. Например, lodctr был полностью переработан для Vista, но документ в MSDN предназначен только для версии XP и больше не применяется. Если вы посещаете MSDN, пожалуйста, используйте кнопку «Эта документация бесполезна», и, возможно, Microsoft получит сообщение.

6 голосов
/ 11 сентября 2008

Смотрите здесь: http://msdn.microsoft.com/en-us/library/aa371925.aspx

Это не очень сложно, но немного утомительно, поскольку API включает в себя широкое использование самоссылающихся структур переменной длины и должен использовать некоторый механизм IPC для получения данных из отслеживаемого процесса.

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

Не используйте классы монитора производительности ATL. Я знаю, что их легко добавить, у них есть мастер и все такое, но они безнадежно прослушиваются. Я добавил их в одно из моих приложений для разработки на работе, а затем мне пришлось пройтись и скопировать код через 6 месяцев. Всего около 3 недель работы потеряно из-за этого шума.

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

Я искал что-то, что было бы легче реализовать. Мне, вероятно, придется использовать этот подход. Я также показал коллеге (спасибо PJ), что есть учебник Scribble, который был изменен, чтобы показать, как добавить Счетчик производительности с использованием классов ATL: Образец PerformanceScribble: мониторинг производительности в приложении MFC

Большим недостатком здесь является то, что в настоящее время мое приложение не использует MFC или ATL, и мне придется добавить поддержку для него.

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