То, что вы хотите получить, это мгновенное использование процессора (вид) ...
На самом деле, мгновенное использование процессора для процесса не существует. Вместо этого вам нужно сделать два измерения и рассчитать среднее использование процессора, формула довольно проста:
AvgCpuUsed = [TotalCPUTime (процесс, время2) - TotalCPUTime (процесс, время1)] / [время2-время1]
Чем меньше разница в Time2 и Time1, тем более «мгновенным» будет ваше измерение. Диспетчер задач Windows рассчитывает загрузку процессора с интервалом в одну секунду. Я обнаружил, что этого более чем достаточно, и вы можете даже подумать о том, чтобы делать это с интервалами в 5 секунд, поскольку сам процесс измерения занимает циклы ЦП ...
Итак, во-первых, чтобы получить среднее время процессора
using System.Diagnostics;
float GetAverageCPULoad(int procID, DateTme from, DateTime, to)
{
// For the current process
//Process proc = Process.GetCurrentProcess();
// Or for any other process given its id
Process proc = Process.GetProcessById(procID);
System.TimeSpan lifeInterval = (to - from);
// Get the CPU use
float CPULoad = (proc.TotalProcessorTime.TotalMilliseconds / lifeInterval.TotalMilliseconds) * 100;
// You need to take the number of present cores into account
return CPULoad / System.Environment.ProcessorCount;
}
теперь, для «мгновенной» загрузки процессора вам понадобится специализированный класс:
class ProcLoad
{
// Last time you checked for a process
public Dictionary<int, DateTime> lastCheckedDict = new Dictionary<int, DateTime>();
public float GetCPULoad(int procID)
{
if (lastCheckedDict.ContainsKey(procID))
{
DateTime last = lastCheckedDict[procID];
lastCheckedDict[procID] = DateTime.Now;
return GetAverageCPULoad(procID, last, lastCheckedDict[procID]);
}
else
{
lastCheckedDict.Add(procID, DateTime.Now);
return 0;
}
}
}
Вы должны вызывать этот класс из таймера (или любого другого метода интервала, который вам нравится) для каждого процесса, который вы хотите отслеживать , если вы хотите, чтобы все процессы просто использовали Process.GetProcesses статический метод