2011-07-04 10 views
9

Estoy tratando de leer una cantidad de contadores de rendimiento de una aplicación .NET 4 en ejecución, desde otra aplicación .NET 4.Contador de rendimiento de lectura de C#: La instancia no existe en la categoría especificada

Algunos contadores, como Process\% Processor Time y Process\Private Bytes funcionan bien. Sin embargo, tan pronto como trato de leer un contador de rendimiento de una de las categorías de .NET, como .NET CLR Memory\# Gen 0 Collections, me sale el siguiente excepción:

Instance 'MyApplication' does not exist in the specified Category 

Cuando llamo:

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

Devuelve un conjunto muy pequeño de instancias, y MyApplication de hecho no está en la lista. Sin embargo, cuando miro mis contadores de rendimiento en perfmon, la lista de instancias que veo allí para la misma categoría/contador es mucho más larga y SÍ INCLUYE MyApplication.

¿Alguien sabe por qué los contadores .NET no son visibles para mi aplicación?

(Nota: La aplicación supervisada es comenzado por la aplicación de monitoreo, por lo que definitivamente se ejecutan en la misma cuenta de usuario También probé el inicio de mi aplicación de monitorización como administrador y la adición de mi cuenta al grupo de usuarios del Monitor de rendimiento, a. sin efecto.)

+0

http://stackoverflow.com/questions/5832709/exception-instance-name-of-instance-does-not-exist-in-the-specified-category –

+0

No es el problema; Solo 1 instancia, con y sin la configuración XML, no funciona y, en cualquier caso, los contadores funcionan correctamente en perfmon. – rix0rrr

+0

Solo obtengo '" ConsoleApplication2 "' cuando ejecuto el ejecutable generado. No lo entiendo cuando ejecuto el programa desde Visual Studio. En su lugar, obtengo 'ConsoleApplication2.vshost'. –

Respuesta

18

Existen dos configuraciones para un proyecto que pueden ser relevantes para su problema.

En primer lugar, Project + Properties, pestaña Build, Platform target. En una máquina con un sistema operativo de 64 bits, configurar esto en x86 obtendrá una lista de nombres de instancia que hacen no incluyen procesos de 64 bits. Perfmon.exe es un proceso de 64 bits que muestra todas las instancias, tanto de 32 bits como de 64 bits. Obtenga el mismo comportamiento estableciendo el objetivo de la Plataforma en AnyCPU, que ya no es el predeterminado en Visual Studio 2010. Deshabilite "Preferir 32 bits" si lo ve.

En segundo lugar está Project + Properties, pestaña Debug, opción "Habilitar el proceso de alojamiento de Visual Studio". Cuando está marcado, está depurando un proceso llamado yourapp.vshost.exe en lugar de yourapp.exe. Eso también afecta el nombre de la instancia, será yourapp.vshost. No es probable que sea el problema en su caso específico.

Asegúrese de actualizar su pregunta con esta información esencial si esta conjetura no era precisa.

+2

Se debió al objetivo de la plataforma. Cambiar de x86 a 'Cualquier CPU' funcionó. Muchas gracias, ¡nunca hubiera pensado en esto! – rix0rrr

+0

También asegúrese de que 'Propiedades del proyecto -> Pestaña Compilar -> Preferir 32 bit' no esté configurado. – Ananke

+0

Tengo el mismo problema. Intenté Cualquier CPU, x86 y x64 (prefiero que 32 bits no estén configurados). Mismo error en cada situación. ¿Alguien más tiene este problema? – Roger

Cuestiones relacionadas