2016-04-11 2 views
-1

Je suis tombé sur un comportement différent dans le calcul de l'itilisation du processeur. Dans mon code j'utilise le compteur de performance "Processor Time", instance "_Total" et il semble fonctionner (Windows Performance Monitor afficher la même valeur, Sysinternals Process Explorer ainsi) , mais intégré Gestionnaire des tâches dans Windows 8 ou 10 montre beaucoup moins, si les options d'alimentation permettent d'équilibrer la vitesse du CPU et le CPU est à un moment donné fonctionnant à une fréquence plus basse.Utilisation du processeur et vitesse du processeur

Y at-il une fonction C# de C, perf. compteur .. pour fournir cette valeur (Gestionnaire des tâches), ou lire la fréquence actuelle du processeur et en quelque sorte le calculer?

+0

En utilisant _Total, et ainsi obtenir le temps processeur utilisé pour * tous * processus au lieu de simplement le vôtre, est assez inhabituel et pas ce que Task Manager affiche dans l'onglet Processus . La catégorie compte, il y a "Processeur" et "Information Processeur". Le gestionnaire de tâches utilise ce dernier, c'est une catégorie de compteur plus récente qui essaie de compenser les fréquences variables et l'hyper-threading. Le meilleur moyen est certainement de ne pas ajouter un doodah à votre programme qui est trivialement visible sans aucune aide. –

+0

merci, mais la catégorie "Processeur" et "Informations sur le processeur" me donne les mêmes numéros, même CPU tourne à environ la moitié de la fréquence. – user2136076

Répondre

0

Si quelqu'un face à cette exigence, je veux vous montrer comment je me suis finalement résolu il:

Apparemment, le Windows 8 comprend un compteur de moniteur de performance nommé « % processeur Utility ». Et c'est celui qui est montré dans le gestionnaire de tâches de Win 8, et Win 10 comme utilisation du processeur. Contrairement à «% Processor Time», qui est généralement utilisé pour afficher l'utilisation du processeur, ce compteur prend en compte la vitesse du processeur équilibrée.

% Utilitaire de processeur est la quantité de travail un processeur termine, en pourcentage de la quantité de travail que le processeur pourrait terminer si elle fonctionnait à sa puissance nominale et jamais ralenti. Sur certains processeurs, l'utilitaire de processeur peut dépasser 100%.

En C# extrait de code:

PerformanceCounter _cpuCounter = new PerformanceCounter("Processor Information", "% Processor Utility", "_Total"); 
CounterSample firstValue = _cpuCounter.NextSample(); 
Thread.Sleep(500); 
CounterSample secondValue = _cpuCounter.NextSample(); 
    string cpuUsage = CounterSample.Calculate(firstValue, secondValue).ToString("0.0");