none
Connaitre l'usage de mon processeur RRS feed

  • Question

  • Bonjour,

    J'aimerai pouvoir analyser en temps réel l'utilisation de mon processeur mais le soucis c'est que j'ai deux processeur. Voilà mon code

    Code :
    public class Diagnostic
    {
    private PerformanceCounter memoire;
    private PerformanceCounter processeur;

    public Diagnostic()
    {
    memoire = new PerformanceCounter("Memory","Available Bytes");
    processeur = new PerformanceCounter("Processor", "% Processor Time");
    }

    public String getMemoire()
    {
    float valeur = memoire.NextValue() / 1048576;
    return valeur.ToString();
    }

    public String getProcesseur()
    {
    float valeur = processeur.NextValue();
    return valeur.ToString();
    }
    }
    Et il m'indique pour la ligne en rouge l'erreur suivante

    Code :
     
    Le compteur n'est pas une instance unique. Un nom d' instance doit être spécifié
     
    J'en ai déduis que s'était parce que j'avais deux processeurs et qu'il fallait les différencier.

    Merci de votre aide.
    dimanche 26 juillet 2009 09:34

Réponses

  • Bonjour,

    Oui tout à fait, il faut spécifier le n° du processeur en 3ème paramètre au constructeur de PerformanceCounter :
    new PerformanceCounter("Processor", "% Processor Time", "0");
    Mettre "_Total" au lieu de "0" pour récupérer la somme des 2 processeurs.

    Cordialement



    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 10:42
    Modérateur
  • Bonjour,

    C'est normal, il ne faut pas réinitialiser à chaque fois votre compteur de performance à chaque appel de la méthode getProcesseur().
    Vous devez donc faire une instanciation de votre classe Diagnostic() une seule fois et appeler la méthode getProcesseur() autant de fois que vous voulez.

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 13:46
    Modérateur
  • Bonjour,

    Dans ce cas, réalisez 2 appels à getProcesseur() pour voir.

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 16:42
    Modérateur

Toutes les réponses

  • Bonjour,

    Oui tout à fait, il faut spécifier le n° du processeur en 3ème paramètre au constructeur de PerformanceCounter :
    new PerformanceCounter("Processor", "% Processor Time", "0");
    Mettre "_Total" au lieu de "0" pour récupérer la somme des 2 processeurs.

    Cordialement



    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 10:42
    Modérateur
  • Merci pour le renseignement mais malheureusement ce dernier m'indique constamment 0 voici le code que j'ai implémenté :

    Est - ce normal qui me renvoie constamment 0 ?

    public Diagnostic()
    {
                //memoire = new PerformanceCounter("Memory","Available Bytes");
                processeur = new PerformanceCounter("Processor", "% Processor Time", "_Total");
                //disque = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
    }
    
    public String getProcesseur()
    {
                float valeur = processeur.NextValue();
                return valeur.ToString();
    }

    • Modifié la-praline dimanche 26 juillet 2009 11:15
    dimanche 26 juillet 2009 11:07
  • Bonjour,

    Pouvez-vous nous montrer le code qui appelle "getProcesseur" ?

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 11:30
    Modérateur
  • Diagnostic diagnostic = new Diagnostic();
    MessageBox.Show(diagnostic.getProcesseur());
    Le code précédent était intégré à une classe nommé Diagnostic.

    Merci
    dimanche 26 juillet 2009 12:04
  • Bonjour,

    C'est normal, il ne faut pas réinitialiser à chaque fois votre compteur de performance à chaque appel de la méthode getProcesseur().
    Vous devez donc faire une instanciation de votre classe Diagnostic() une seule fois et appeler la méthode getProcesseur() autant de fois que vous voulez.

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 13:46
    Modérateur
  • Mais le soucis c'est que pour testé la fiabilité de cette instruction je n'ai pas associé de timer à ceci.
    Cette instruction n'est éxécuté qu'une fois.
    Il y a q'uune seule instanciation et qu'un seul appel à getProcesseur().
    dimanche 26 juillet 2009 16:32
  • Bonjour,

    Dans ce cas, réalisez 2 appels à getProcesseur() pour voir.

    Cordialement
    Gilles TOURREAU - MVP C#
    dimanche 26 juillet 2009 16:42
    Modérateur
  • En effet il débute son débute son fonctionnement à partir du second appel merci à vous.
    dimanche 26 juillet 2009 17:14