Счетчик производительности чтения из C #: Экземпляр не существует в указанной категории - PullRequest
10 голосов
/ 04 июля 2011

Я пытаюсь прочитать несколько счетчиков производительности из запущенного приложения .NET 4, из другого приложения .NET 4.

Некоторые счетчики, такие как Process\% Processor Time и Process\Private Bytes, работают нормально.Однако, как только я пытаюсь прочитать счетчик производительности из одной из категорий .NET, такой как .NET CLR Memory\# Gen 0 Collections, я получаю следующее исключение:

Instance 'MyApplication' does not exist in the specified Category

Когда я звоню:

new PerformanceCounterCategory(".NET CLR Memory").GetInstanceNames()

Возвращает очень маленький набор экземпляров, и MyApplication действительно отсутствует в списке.Однако, когда я смотрю на свои счетчики производительности в perfmon, список экземпляров для той же категории / счетчика, который я вижу там, гораздо длиннее и включает в себя MyApplication.

Кто-нибудь знает, почему счетчики .NETневидимо для моего приложения?

(Примечание. Отслеживаемое приложение запущено приложением мониторинга, поэтому оно определенно запускается под той же учетной записью пользователя. Я также попытался запустить приложение мониторинга в качестве администратораи добавление моей учетной записи в группу «Пользователи системного монитора», но безрезультатно.)

1 Ответ

18 голосов
/ 04 июля 2011

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

Прежде всего, Project + Properties, вкладка Build, цель Platform. Если на компьютере установлена ​​64-разрядная операционная система, то для x86 вы получите список имен экземпляров, которые , а не включают 64-разрядные процессы. Perfmon.exe - это 64-битный процесс, он показывает все экземпляры, как 32-битные, так и 64-битные приложения. Получите то же поведение, установив для цели платформы значение AnyCPU, что больше не является значением по умолчанию в Visual Studio 2010. Снимите флажок «Предпочитать 32-разрядный», если вы его видите.

Второй - Project + Properties, вкладка «Отладка», опция «Включить процесс размещения Visual Studio». Когда установлен этот флажок, вы отлаживаете процесс с именем yourapp.vshost.exe вместо yourapp.exe. Это также влияет на имя экземпляра, это будет yourapp.vshost. Скорее всего, проблема не будет в вашем конкретном случае.

Обязательно обновите свой вопрос этой важной информацией, если это предположение не соответствует действительности.

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