IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Utilisation processeur en multi proc


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut Utilisation processeur en multi proc
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    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.

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Je sais pas si ça va t'aider, mais j'ai ce code adapté à partir d'une de mes applications dans une application console, avec une référence vers System.Management et comme using System.Management, System.Threading, etc :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
            static ManagementObjectSearcher WMIProcessorSearcher { get; set; }
            static ManagementScope WMILocalScope { get; set; }
     
            static List<LastCPUInfos> LastCPUs { get; set; }
     
            protected class LastCPUInfos
            {
                public virtual ulong ProcessorTime { get; set; }
                public virtual ulong SysTimeStamp { get; set; }
                public virtual double ProcessorUsage { get; set; }
            }
     
            private static void ShowCPU()
            {
                LastCPUs = new List<LastCPUInfos>();
     
                WMILocalScope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", Environment.MachineName));
     
                WMIProcessorSearcher = new ManagementObjectSearcher(WMILocalScope,
                    new SelectQuery("Win32_PerfRawData_PerfOS_Processor"));
     
                ulong current_time = 0;
                ulong sys_time = 0;
                int index = 0;
                ManagementObjectCollection result = null;
                double total_processor_usages = 0;
                while (true)
                {
                    total_processor_usages = 0;
                    index = 0;
                    result = WMIProcessorSearcher.Get();
                    foreach (ManagementBaseObject obj in result)
                    {
                        if ((obj["Name"] as string) == "_Total")
                            continue;
                        else
                        {
                            current_time = (ulong)obj["PercentProcessorTime"];
                            sys_time = (ulong)obj["TimeStamp_Sys100NS"];
     
                            if (LastCPUs.Count <= index)
                            {
                                LastCPUs.Add(new LastCPUInfos()
                                {
                                    ProcessorTime = current_time,
                                    SysTimeStamp = sys_time
                                });
                            }
                            else
                            {
                                if (sys_time - LastCPUs[index].SysTimeStamp > 0) /* Bah ouais, ou sinon Division par zéro -> BOOM */
                                {
                                    LastCPUs[index].ProcessorUsage = 1.0 - ((double)(current_time - LastCPUs[index].ProcessorTime) / (double)(sys_time - LastCPUs[index].SysTimeStamp));
                                    total_processor_usages += LastCPUs[index].ProcessorUsage;
                                }
     
                                LastCPUs[index].ProcessorTime = current_time;
                                LastCPUs[index].SysTimeStamp = sys_time;
     
                                Console.WriteLine(String.Format("Coeur {0} : {1}", index, LastCPUs[index].ProcessorUsage));
                            }
     
                            index++;
                        }
                    }
     
                    if (index > 0)
                    {
                        Console.WriteLine(String.Format("Utilisation moyenne : {0}", total_processor_usages / index));
                    }
     
                    System.Threading.Thread.Sleep(1000);
                }
            }

Discussions similaires

  1. CellRenderer utilisation processeur
    Par theyankee76 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/12/2006, 13h41
  2. Utilisation ListBox en multi-colonne
    Par beekeep dans le forum MFC
    Réponses: 3
    Dernier message: 15/10/2006, 23h54
  3. Réponses: 3
    Dernier message: 04/12/2005, 15h08
  4. OpenGLUT et utilisation processeur
    Par rulianf dans le forum GLUT
    Réponses: 1
    Dernier message: 21/11/2005, 13h47
  5. Réponses: 4
    Dernier message: 24/08/2005, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo