Есть два варианта сделать это.
Первый заключается в использовании 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());
}
Используйте профилировщик для работы, а не для памяти – Gilad
я видел код, такой как: PerformanceCounter myAppCpu = новый PerformanceCounter ( «процесс», «% загруженности процессора», «приложение», правда); double pct = myAppCpu.NextValue(); Однако это дает одно значение для всего процессора, а не% на ядро, что и я. – Chris
Возможный дубликат [Как получить загрузку процессора на ядро в C#?] (Http://stackoverflow.com/questions/2938629/how-can-i-get-cpu-load-per-core-in-c) – rducom