[c#] CPU-Last Überwachen

Passer

Erfahrenes Mitglied
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
 
Ich erweitere meine Fragestellung auf
"Wie kann man die CPU-Last eines bestimmten Prozesses und die Gesamtlast aller Prozesse erfragen?"

MfG
Passer
 
C#:
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);
}
 
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?
 
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.
 

Anhänge

  • 25271attachment.zip
    26,6 KB · Aufrufe: 804
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...
 
Also mit _Total solltest die gesamten CPUs auslesen. Mit 0 oder 1 oder mehr kannst dann die einzelnen CPUs ansprechen.
 
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?
 
also bei mir wird andauernd 100% angezeigt. laut Tasktmanger liegt die CPU Auslastung aber zwischen 2-5%
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück