Je veux obtenir l'utilisation totale totale du processeur pour une application en C #. J'ai trouvé de nombreuses façons de creuser dans les propriétés des processus, mais je ne veux que l'utilisation du processeur des processus et le processeur total comme vous obtenez dans le TaskManager.
Comment je fais ça?
Réponses:
Vous pouvez utiliser la classe PerformanceCounter de System.Diagnostics .
Initialisez comme ceci:
Consommer comme ceci:
la source
Un peu plus que ce qui était requis, mais j'utilise le code de minuterie supplémentaire pour suivre et alerter si l'utilisation du processeur est de 90% ou plus pendant une période prolongée de 1 minute ou plus.
la source
cpuCounter.NextValue
renvoie afloat
. Alors pourquoi l'attribuer à undynamic
? Alors pourquoi retourner ça endynamic
tant queobject
? Alors pourquoi essayer d'assigner unobject
à unint
dans la ligneint cpuPercent = getCPUCounter()
? (Ce code ne sera pas compilé.)Après avoir passé un peu de temps à lire quelques fils différents qui semblaient assez compliqués, j'ai trouvé cela. J'en avais besoin pour une machine à 8 cœurs où je voulais surveiller le serveur SQL. Pour le code ci-dessous, j'ai passé "sqlservr" comme appName.
Il semble mesurer correctement le% de CPU utilisé par SQL sur mon serveur 8 cœurs.
la source
done
à vrai? À moins que j'aie oublié quelque chose, cela semble être une boucle sans fin:while(!done){...}
C'est bon, je l'ai! Merci de votre aide!
Voici le code pour le faire:
la source
Vous pouvez utiliser WMI pour obtenir des informations sur le pourcentage du processeur. Vous pouvez même vous connecter à un ordinateur distant si vous disposez des autorisations appropriées. Regardez http://www.csharphelp.com/archives2/archive334.html pour avoir une idée de ce que vous pouvez accomplir.
La référence MSDN pour Win32_Process peut également être utile . espace de noms .
Voir aussi un exemple CodeProject Comment: (presque) tout dans WMI via C # .
la source
CMS a raison, mais aussi si vous utilisez l'explorateur de serveurs dans Visual Studio et jouez avec l'onglet du compteur de performances, vous pouvez trouver comment obtenir de nombreuses mesures utiles.
la source
Cela semble fonctionner pour moi, un exemple pour attendre que le processeur atteigne un certain pourcentage
la source
Cette classe interroge automatiquement le compteur toutes les 1 secondes et est également thread-safe:
la source
System.DateTime
est en fait un type de valeur de 8 octets, ce qui signifie que les affectations à uneDateTime
variable ne sont pas atomiques. Ce code n'est pas thread-safe sur les plates-formes 32 bits.Je n'ai pas aimé avoir à ajouter dans le décrochage 1 seconde à toutes les
PerformanceCounter
solutions. Au lieu de cela, j'ai choisi d'utiliser uneWMI
solution. La raison pour laquelle l'attente / décrochage de 1 seconde existe est de permettre à la lecture d'être précise lors de l'utilisation d'unPerformanceCounter
. Cependant, si vous appelez souvent cette méthode et actualisez ces informations, je vous conseille de ne pas avoir à subir constamment ce retard ... même si vous envisagez de faire un processus asynchrone pour l'obtenir.J'ai commencé avec l'extrait d'ici Retour de l'utilisation du processeur dans WMI en utilisant C # et j'ai ajouté une explication complète de la solution sur mon blog ci-dessous:
Obtenir l'utilisation du processeur sur tous les cœurs en C # à l'aide de WMI
la source
Informations originales dans ce lien https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/
la source