Это моя функция для перечисления процессов в окне Windows и расчета процента использования ЦП для каждого процесса, но результаты неверны.
Использование ЦП не составляет до 100%, но больше похоже на 120%или 130% и я не знаю, что я делаю не так.Похоже, что он рассчитывает правильную загрузку ЦП для таких приложений varoius, как firefox, VS2010, office, ..., но имеет проблемы с System Idle Process.
public List<ProcInfo> GetRunningProcesses()
{
List<ProcInfo> allProcesses = new List<ProcInfo>();
UInt64 currentProcessCpuTime = 0;
UInt64 allProcessCpuTime = 0;
SelectQuery wmiQuery = new SelectQuery("SELECT Name, Description, ProcessId, KernelModeTime, UserModeTime FROM Win32_Process");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(connectionScope, wmiQuery);
ManagementObjectCollection moc = oSearcher.Get();
foreach (ManagementObject mo in moc)
{
allProcessCpuTime += (UInt64)mo["KernelModeTime"] + (UInt64)mo["UserModeTime"];
}
foreach (ManagementObject mo in moc)
{
currentProcessCpuTime = (UInt64)mo["KernelModeTime"] + (UInt64)mo["UserModeTime"];
allProcesses.Add(new ProcInfo((string)mo["Name"], (string)mo["Description"], (UInt32)mo["ProcessId"], (currentProcessCpuTime / (double)allProcessCpuTime * 100));
}
return allProcesses;
}
РЕДАКТИРОВАТЬ:
Я обнаружил, что моя функция все неправильно.
Я начинаю вознаграждение за лучшее рабочее решение.Решение должно работать для локальной и удаленной системы и должно быть быстрым.