Obtener uso de CPU de varios núcleos en Visual C#

He estado buscando esto por un tiempo y espero que alguien aquí pueda responder a mi pregunta. Así que estoy tratando de encontrar la mejor manera de obtener el promedio Uso de CPU de 2 o 4 núcleos. Actualmente estoy usando un contador de rendimiento que, por lo que sé, solo devuelve el uso de un solo núcleo. Idealmente, me gustaría que coincidiera o al menos se pareciera a la barra de uso en el Administrador de tareas, y he investigado las consultas de WMI, pero esperaba obtener alguna aclaración sobre el mejor enfoque. Actualmente estoy usando un i7, que tiene hyperthreading, es decir, tiene "8" núcleos. No estoy seguro si esto hace mucha diferencia, pero aunque podría. Gracias por cualquier sugerencia

preguntado el 04 de julio de 12 a las 09:07

IIRC, el contador de rendimiento se puede configurar en cualquier instancia de CPU lógica. -

1 Respuestas

Usar Win32_PerfFormattedData_Counters_ProcessorInformation, puedes usar el campo PercentProcessorTime que dará instancias de cada núcleo/subproceso en su sistema con su uso respectivo.

Acabo de probar esto en el mío y obtuve 8 objetos de administración para mis 8 subprocesos.

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_PerfFormattedData_Counters_ProcessorInformation instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("PercentProcessorTime: {0}", queryObj["PercentProcessorTime"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

Actualizar:

Eso fue una pequeña mentira, obtuve 10 instancias. Sus nombres eran:

  1. _Total
  2. 0,_Total
  3. 0,7
  4. 0,6
  5. 0,5

etc. Debe filtrar lo que necesita con una cláusula where:

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation WHERE NOT Name='_Total' AND NOT Name='0,_Total'

Respondido 04 Jul 12, 09:07

Gracias por eso, parece funcionar bien, pero para mis 8 núcleos, ¿por qué aparece como 10 núcleos? Salud - OSer

¡Increíble! Muchas gracias, exactamente lo que necesitaba :D - OSer

Para obtener resultados más precisos, use Win32_PerfRawData_PerfOS_Processor y solo busque los campos explícitos que necesita. "SELECT *" es notablemente más lento con la mayoría de las consultas WMI. - Xcalibur37

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.