Quiero obtener el uso total total de la CPU para una aplicación en C #. He encontrado muchas formas de profundizar en las propiedades de los procesos, pero solo quiero el uso de la CPU de los procesos y la CPU total como la que obtienes en el TaskManager.
¿Cómo puedo hacer eso?
Respuestas:
Puede usar la clase PerformanceCounter de System.Diagnostics .
Inicialice así:
Consumir así:
fuente
Un poco más de lo requerido, pero utilizo el código del temporizador adicional para rastrear y alertar si el uso de la CPU es del 90% o más durante un período sostenido de 1 minuto o más.
fuente
cpuCounter.NextValue
devuelve afloat
. Entonces, ¿por qué asignarlo a adynamic
? Entonces, ¿por qué devolver esodynamic
como unobject
? Entonces, ¿por qué tratar de asignar unaobject
a unaint
en la líneaint cpuPercent = getCPUCounter()
? (Ese código no se compilará).Después de pasar un tiempo leyendo un par de hilos diferentes que parecían bastante complicados, se me ocurrió esto. Lo necesitaba para una máquina de 8 núcleos donde quería monitorear el servidor SQL. Para el siguiente código, pasé "sqlservr" como appName.
Parece medir correctamente el% de CPU que utiliza SQL en mi servidor de 8 núcleos.
fuente
done
en verdad? A menos que haya pasado por alto algo, este parece ser un ciclo sin fin:while(!done){...}
Está bien, lo tengo! ¡Gracias por tu ayuda!
Aquí está el código para hacerlo:
fuente
Puede usar WMI para obtener información de porcentaje de CPU. Incluso puede iniciar sesión en una computadora remota si tiene los permisos correctos. Mire http://www.csharphelp.com/archives2/archive334.html para tener una idea de lo que puede lograr.
También podría ser útil la referencia de MSDN para el espacio de nombres Win32_Process .
Consulte también un ejemplo de CodeProject Cómo: (casi) todo en WMI a través de C # .
fuente
CMS tiene razón, pero también si usa el explorador de servidores en Visual Studio y juega con la pestaña del contador de rendimiento, entonces puede descubrir cómo obtener muchas métricas útiles.
fuente
Esto parece funcionar para mí, un ejemplo para esperar hasta que el procesador alcance un cierto porcentaje
fuente
Esta clase sondea automáticamente el contador cada 1 segundo y también es seguro para subprocesos:
fuente
System.DateTime
es en realidad un tipo de valor de 8 bytes, lo que significa que las asignaciones a unaDateTime
variable no son atómicas. Este código no es seguro para subprocesos en plataformas de 32 bits.No me gustó tener que agregar el puesto de 1 segundo a todas las
PerformanceCounter
soluciones. En cambio, elegí usar unaWMI
solución. La razón por la que existe la espera / parada de 1 segundo es para permitir que la lectura sea precisa al usarPerformanceCounter
. Sin embargo, si llama a este método con frecuencia y actualiza esta información, le aconsejaría que no tenga que sufrir ese retraso constantemente ... incluso si está pensando en hacer un proceso asíncrono para obtenerlo.Comencé con el fragmento desde aquí Devolviendo el uso de la CPU en WMI usando C # y agregué una explicación completa de la solución en la publicación de mi blog a continuación:
Obtenga el uso de la CPU en todos los núcleos en C # con WMI
fuente
Información original en este enlace https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/
fuente