tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
4978
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Passer Passer ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Beiträge
    160
    Tagchen zusammen,

    ich bastel grad ein weing mit der Process Klasse herum und musste leide rfeststellen, dass man damit scheinbat nichtdie aktuelle CPU Last eines Prozesses erfragen kann.


    Weiss jemand, wie das geht?

    (Grund: ichg möchte einen kleinen Logger schreiben, der für eine Anwendung penibelst die CPU Auslastung (bzw nur die Peaks) logt).

    MfG
    Passer
     

  2. #2
    Passer Passer ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Beiträge
    160
    Ich erweitere meine Fragestellung auf
    "Wie kann man die CPU-Last eines bestimmten Prozesses und die Gesamtlast aller Prozesse erfragen?"

    MfG
    Passer
     

  3. #3
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Code csharp:
    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
    
    using System.Management;
    using System.Collections;
     
    ManagementScope mgmtScope;
    Hashtable Per_Processors = new Hashtable();
     
    if(MachineName != Environment.MachineName)
    {
        ConnectionOptions options = new ConnectionOptions();
        options.Username = AdminUser;
        options.Password = AdminPass;
     
        mgmtScope = new ManagementScope(@"\" + MachineName + @"rootcimv2",options);
    }
    else
    {
        mgmtScope = new ManagementScope(@"\.rootcimv2");
    }
     
    try
    {
        mgmtScope.Connect();
    }
    catch(Exception ex)
    {
      Console.WriteLine(ex.Message);
    }
     
    ManagementPath mp = new ManagementPath("Win32_Processor");
     
    try
    {
        ManagementClass mc = new ManagementClass(mgmtScope, mp, null);
        ManagementObjectCollection procs = mc.GetInstances();
        foreach(ManagementObject mo in procs)
        {
            string DeviceID = "";
            string Usage = "";
            foreach(PropertyData pd in mo.Properties)
            {
                if(pd.Name == "DeviceID")
                    DeviceID = pd.Value.ToString();
     
                if(pd.Name == "LoadPercentage")
                    Usage = pd.Value.ToString();
     
            }
            Perf_Processors.Add(DeviceID, Usage); //Hashtable
        }
    }
    catch(Exception ex)
    {
      Console.WriteLine(ex.Message);
    }
     

  4. #4
    Passer Passer ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Beiträge
    160
    Geht das nicht auch irgendwie direkter?


    Es sollte ein Poll alle 100 ms erfolgen und möglichst keine CPU fressen.

    Sehe ichdas richtig, dass obiges Snippet für die Gesamtlast ist?
     

  5. #5
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Anbei ein kleines Demo-Projekt. Coding-Styles wurden keine beachtet. Ergo schmutzig, grauslig und was weiß ich noch alles, aber zeigt dir wie du das machen kannst.
    Angehängte Dateien Angehängte Dateien
     

  6. #6
    Passer Passer ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Beiträge
    160
    Danke, das Ding ist bestens, allerdings beschleicht mich bei den Werten, die ich messe der Gedanke, das man bei Dual Core CPUs noch was spezielles beachten muss...
     

  7. #7
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Also mit _Total solltest die gesamten CPUs auslesen. Mit 0 oder 1 oder mehr kannst dann die einzelnen CPUs ansprechen.
     

  8. #8
    Passer Passer ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Beiträge
    160
    Danke, klappt jetzt wunderbar
    und mit quasi keiner CPU Belastung
     

  9. #9
    B0mB3r B0mB3r ist offline Grünschnabel
    Registriert seit
    Jul 2007
    Beiträge
    3
    Hat sowas auch jemand für VB6?

    Also wo ich dann einfach die CPU mit angeben kann?

    Hab keine Ahnung von C aber ich denke mal das das hier die CPU Auslastung zurück gibt:
    "cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");"

    Und bei total könnt ich doch die einzelenn Kerne ansprechen, wenn ich das richtig vestanden hab oder nicht?
     

  10. #10
    lordfritte lordfritte ist offline Mitglied Brokat
    Registriert seit
    Mar 2006
    Beiträge
    256
    also bei mir wird andauernd 100% angezeigt. laut Tasktmanger liegt die CPU Auslastung aber zwischen 2-5%
    Geändert von lordfritte (28.03.08 um 19:18 Uhr)
     

Ähnliche Themen

  1. Prozesse überwachen
    Von Freaky_09 im Forum .NET Application und Service Design
    Antworten: 7
    Letzter Beitrag: 02.12.09, 12:17
  2. VNC Zugriffe überwachen?
    Von chriss_2oo4 im Forum Netzwerke
    Antworten: 0
    Letzter Beitrag: 30.10.07, 10:06
  3. Process überwachen
    Von andidonis im Forum Java
    Antworten: 0
    Letzter Beitrag: 28.09.07, 15:47
  4. Prpzesse überwachen
    Von redneb im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 08.12.06, 12:19
  5. traffic überwachen mit CGI?
    Von dotmaster im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 0
    Letzter Beitrag: 21.05.02, 01:45