2015-02-20 2 views
-1

Мне было интересно, сможет ли кто-нибудь помочь получить информацию об использовании процессора для конкретного приложения, я могу получить информацию об использовании, идентичную тому, что вы увидите в диспетчере задач, используя следующие codeМониторинг использования ЦП по всем ядрам для приложения .net

Любая помощь была бы принята с благодарностью, спасибо.

+0

Используйте профилировщик для работы, а не для памяти – Gilad

+0

я видел код, такой как: PerformanceCounter myAppCpu = новый PerformanceCounter ( «процесс», «% загруженности процессора», «приложение», правда); double pct = myAppCpu.NextValue(); Однако это дает одно значение для всего процессора, а не% на ядро, что и я. – Chris

+0

Возможный дубликат [Как получить загрузку процессора на ядро ​​в C#?] (Http://stackoverflow.com/questions/2938629/how-can-i-get-cpu-load-per-core-in-c) – rducom

ответ

0

Есть два варианта сделать это.

Первый заключается в использовании WMI

var searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor"); 
    var cpuUsages = searcher.Get() 
     .Cast<ManagementObject>() 
     .Select(x => new 
         { 
          Name = x["Name"], 
          Usage = x["PercentProcessorTime"] 
         } 
     ) 
     .ToList(); 

    var totalUsage = cpuUsages.Where(x => x.Name.ToString() == "_Total").Select(x => x.Usage).SingleOrDefault(); 

Во-вторых, чтобы использовать ядро ​​PerformanceCounter Еогеасп.

int processorCores = new ManagementObjectSearcher("Select * from Win32_Processor").Get().Cast<ManagementBaseObject>().Sum(item => int.Parse(item["NumberOfCores"].ToString())); 
    var performanceCounter = new PerformanceCounter[processorCores]; 
    for (var i = 0; i < processorCores; i++) 
    { 
     performanceCounter[i] = new PerformanceCounter("Processor", "% Processor Time", i.ToString()); 
    } 
+0

Исправьте меня, если я ошибаюсь, но оба этих примера кода будут давать общую информацию о процессоре) по всем ядрам – Chris

0

Много лет назад я использовал pdh команды, чтобы получить различную информацию для каждого процесса (в моем случае, CPU, холостых и энергетических состояний). Я считаю, что они теперь устаревшие, и есть более новый обновленный набор API.

Я нашел эти examples с использованием информации о производительности с веб-сайта MSDN. Я их не пробовал.

Одно примечание: имена счетчиков могут быть обманчивыми. Много раз я обнаружил, что имя счетчика несколько изменилось от одного поколения окон к другому. В качестве нарисованного примера «COUNTERINFOPROCESS» может стать «COUNTERINFPROCESS». Существует также API для сброса списка имен всех счетчиков.

Смежные вопросы