/ / По-ефективен начин за изчисляване на използването на CPU - c #, .net, ефективност

По-ефективен начин за изчисляване на използването на CPU - c #, .net, ефективност

Така че пиша клонинг на мениджъра на задачите и правилносега използвам това, за да изчисля използването на процесора% s на всеки процес.Проблемът е, че това е много бавно, аз просто се чудех дали има начин да се ускори това.

Освен това не ми е позволено да използвам методите и / или WMI на PerformanceCounter.

//Omitted:
// - Process[] processes just holds the currently running processes
// - rows[] is a list of the rows I have in a table which shows the tables data
// - rows[2] is the column for CPU usage
// - rows[0] is the column for PID
//========
//Do CPU usages
double totalCPUTime = 0;
foreach (Process p in processes)
{
try
{
totalCPUTime += p.TotalProcessorTime.TotalMilliseconds;
}
catch (System.ComponentModel.Win32Exception e)
{
//Some processes do not give access rights to view their time.
}
}
foreach (Process p in processes)
{
double millis = 0;
try
{
millis = p.TotalProcessorTime.TotalMilliseconds;
}
catch (System.ComponentModel.Win32Exception e)
{
//Some processes do not give access rights to view their time.
}
double pct = 100 * millis / totalCPUTime;
for (int i = 0; i < rows.Count; i++)
{
if(rows[i].Cells[0].Value.Equals(p.Id))
{
rows[i].Cells[2].Value = pct;
break;
}
}
}

Отговори:

2 за отговор № 1

употреба PerformanceCounter компоненти, за да получите различни статистически данни за ефективността:

var cpuCounter = new PerformanceCounter("Process", "% Processor Time", p.ProcessName);
double value = cpuCounter.NextValue();

И тук е пример за създаване на нещо като мениджър на задачи.

Също така помислете за използването на Win API функцията GetProcessTimes.