c# windows-7 .net-4.0 performancecounter

c# - PerformanceCounters en.NET 4.0 y Windows 7



windows-7 .net-4.0 (1)

Parece que los contadores de rendimiento estaban dañados en mi sistema. Aunque no seguí esta publicación exactamente, me llevó a la solución. Aquí esta lo que hice:

En un símbolo del sistema con privilegios de administrador / elevar, escriba lo siguiente:

lodctr /?

Cosas útiles allí ...

Luego tipeado:

lodctr /R

De acuerdo con los documentos del paso anterior, esto le permite a Windows reconstruir las cadenas de registro de perf y la información desde cero en función de la configuración actual del registro y de los archivos INI de respaldo. Tengo la sensación de que esto es lo que hizo la magia. Sin embargo, luego noté que los contadores de rendimiento de .NET ya no estaban allí, así que basándome en this escribí lo siguiente para volver a cargarlos:

lodctr "C:/Windows/Microsoft.NET/Framework64/v4.0.20506/corperfmonsymbols.ini"

Tenga en cuenta que esta ruta es para .NET Framework 4.0 en x64. Puede imaginar el camino para otras variaciones del marco / plataforma. Supongo que siempre deberías cargar los contadores de la versión más alta del .NET framework que hayas instalado, pero eso es solo una suposición.

¡Espero que esto ayude a alguien más algún día!

Tengo un programa que funciona bien en VS2008 y Vista, pero lo estoy probando en Windows 7 y VS2010 / .NET Framework 4.0 y no está funcionando. En última instancia, el problema es que System.Diagnostics.PerformanceCounterCategory.GetCategories() (y otros métodos PerformanceCounterCategory) no funciona. Obtengo una System.InvalidOperationException con el mensaje "No se pueden cargar los datos del nombre del contador porque se leyó un índice no válido" en el registro ".

Puedo reproducir esto con el programa muy simple que se muestra a continuación:

class Program { static void Main(string[] args) { foreach (var pc in System.Diagnostics.PerformanceCounterCategory.GetCategories()) { Console.WriteLine(pc.CategoryName); } } }

Me aseguré de ejecutar el programa como administrador. No importa si lo ejecuto con VS / Debugger conectado o no. No tengo otra máquina con Windows 7 o VS2010 para probarla, así que no estoy seguro de qué es lo que está complicando las cosas aquí (¿o ambas?). Es Windows 7 x64 y he intentado forzar que la aplicación se ejecute tanto en x32 como en x64, pero obtengo los mismos resultados.