Создание пользовательских счетчиков производительности в Visual C++

StackOverflow https://stackoverflow.com/questions/55753

Вопрос

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

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

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

Это было полезно?

Решение

Глянь сюда:http://msdn.microsoft.com/en-us/library/aa371925.aspx

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

Другие советы

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

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

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

КСТАТИ:Другая программа, unlodctr, отменяет эффект lodctr и должна использоваться, если вы вносите какие-либо изменения в свои счетчики, поскольку нет операции «замены», только удаляете старое, а затем устанавливаете новое.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top