obtenir l'utilisation actuelle du processeur en C #
Je veux avoir de courant d'utilisation du PROCESSEUR dans mon projet
namespace Monitoring_Tool
{
public partial class ajaxExecute : System.Web.UI.Page
{
private PerformanceCounter theCPUCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
private PerformanceCounter theMemCounter = new PerformanceCounter("Memory", "Available MBytes");
protected void Page_Load(object sender, EventArgs e)
{
float cpuUsage = 0.00F;
cpuUsage = this.theCPUCounter.NextValue();
}
}
}
Quand je debug de mon projet, la valeur de cpuUsage
montre 0.00
mais quand je fais QuickWatch
sur this.theCPUCounter.NextValue();
c'est montrer 20.6786852
.
Pourquoi je ne peux pas le stocker dans une variable?
source d'informationauteur Shaggy
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous avez besoin d'appeler
NextValue
plusieurs fois sur la mêmePerformanceCounter
instance (donc au moins deux fois). Le premier appel renvoie toujours 0.Vous pouvez contourner ce (genre de) en appelant
NextValue
deux fois dans votrePage_Load
gestionnaire d'événements, seulement de stocker la valeur de retour de la deuxième appel:La raison pour laquelle il montre dans l'espion express de le débogueur est probablement juste parce qu'il est (implicitement) appelé plusieurs fois (une fois par le programme et une fois par le débogueur pour l'espion express de la valeur).
Mise à jour de la "sorte de" ci-dessus:
Comme d'autres l'ont mentionné, vous avez généralement besoin de dormir un peu de temps entre les deux appels de réellement observer une différence dans la charge CPU qui résulte en une "mesurable" de différence. Couchage pour 1 s fait habituellement le tour, mais peut-être pas un délai acceptable dans le chargement de votre page.
Ce que vous voulez vraiment faire est de fournir un thread d'arrière-plan à plusieurs reprises des requêtes de ce compteur de performance, de dormir un couple de secondes entre les deux. Et de stocker le résultat quelque part. À partir de votre
Page_Load
ou d'autres événements /fonctions de requête de la (dernière). Tous les nécessaires de blocage à l'encontre des données de courses de cours.Il va être aussi précis que vous pouvez obtenir à l'égard de ce pointeur.
Puisque vous êtes de toute évidence à l'aide de ASP.NET vous devez être prudent avec de telles threads d'arrière-plan. Je ne suis pas ASP.NET expert, mais d'après cette il devrait être possible, même si le fil (et la perf lectures du compteur, il n') seront recyclés, lors de votre domaine d'application /application web. Toutefois, pour ce genre de fonctionnalité qui ne devrait pas être un problème.
C'est un compteur de performance qui dépend fortement de quand vous lire. Un cœur de processeur est soit l'exécution de code, en cours d'exécution pleine d'alésage à "100%". Ou il est complètement éteint, arrêté par l'ARRÊT de l'instruction. Le "% Temps Processeur" compteur vous indique à combien de % du temps, depuis la dernière fois que vous avez vérifié qu'ilil a été à l'exécution de code.
Sorte que vous obtenez seulement les valeurs significatives si vous attendez suffisamment longtemps entre l'échantillonnage. La seconde est passe-partout, c'est ce que vous voyez dans Perfmon.exe et Taskmgr.exe. Plus l'intervalle est court, moins le nombre obtient. Il commence à varier énormément, le saut entre 0 et 100%.
D'arriver à 0% dans la page de l'événement de Chargement est normal, c'est juste initialise le compteur à définir le début de l'intervalle. L'obtention de la prochaine échantillon est des difficultés, vous ne pouvez pas faire cela dans le gestionnaire d'événements. Que vous avez à faire quelque chose de drastique comme ayant un minuteur ou d'un thread que les échantillons à l'un des intervalles d'une seconde et d'utiliser cette valeur.