C'est ma fonction pour énumérer les processus sur Windows Box et calculer le pourcentage d'utilisation de l'UC pour chaque processus, mais les résultats ne sont pas corrects.Mauvaise utilisation de l'UC calculée à l'aide de C# et WMI
L'utilisation du processeur ne correspond pas à 100%, mais plus à 120% ou 130% et je ne sais pas ce que je fais mal. Il semble qu'il calcule correctement l'utilisation du processeur pour les applications varoius comme firefox, VS2010, office, .. mais a des problèmes avec 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;
}
EDIT:
Je trouve que ma fonction est tout faux.
Je commence une prime pour la meilleure solution de travail. La solution doit fonctionner pour le système local et distant et devrait être rapide.
Si vous n'êtes pas obligé d'utiliser WMI, il y a une autre façon en utilisant des compteurs perf: http://stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c –
Est-il possible qu'entre les itérations de vos boucles les valeurs changent? C'est-à-dire qu'un élément a un temps de processeur à un point de la boucle et qu'un autre a le temps pendant l'itération suivante? Juste une pensée ... –
Je suis d'accord avec Mark - vous devriez prendre un instantané des indicateurs de performance (de préférence en parallèle si vous pouvez maximiser vos chances de les obtenir tous en même temps) PUIS faire des maths sur eux. Ils sont dans un état de flucuation. –