Holen Sie sich die CPU-und RAM-Auslastung
Ich brauche, um den ram-Speicher und CPU-Auslastung während der Ausführung eines Prozesses (der Prozess kann laufen, und manchmal über 30 Minuten). Ich bin in der Lage, um die freien RAM, aber die CPU-Auslastung nicht korrekt ist, verglichen mit dem Wert aus der task-manager. Mache ich etwas falsch? Hier ist mein code:
class Program
{
static List<float> AvailableCPU = new List<float>();
static List<float> AvailableRAM = new List<float>();
protected static PerformanceCounter cpuCounter;
protected static PerformanceCounter ramCounter;
static void Main(string[] args)
{
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
ramCounter = new PerformanceCounter("Memory", "Available MBytes");
try
{
System.Timers.Timer t = new System.Timers.Timer(1200);
t.Elapsed += new ElapsedEventHandler(TimerElapsed);
t.Start();
Thread.Sleep(10000);
}
catch (Exception e)
{
Console.WriteLine("catched exception");
}
Console.ReadLine();
}
public static void TimerElapsed(object source, ElapsedEventArgs e)
{
float cpu = cpuCounter.NextValue();
float ram = ramCounter.NextValue();
Console.WriteLine(string.Format("CPU Value: {0}, ram value: {1}", cpu, ram));
AvailableCPU.Add(cpu);
AvailableRAM.Add(ram);
}
}
Aber wenn ich das Programm laufen lassen, hier ist, was es auf der Konsole ausgegeben, verglichen mit Werten aus dem task-manager:
Was mache ich falsch?
Es schwankt auf dem display an - vielleicht sind Sie beim Vergleich verschiedener Zeiträume? Sie haben ein 2,7-Wert...
Ich habe eine Methode zum simulieren von cpu-Last und Werte sind nicht einmal annähernd mit denen aus der task-manager. Ich lese die Werte einmal pro Sekunde. Ich vermute, dass dies möglicherweise aufgrund der multi-core-cpu, aber ich bin mir noch nicht sicher...
Ich habe eine Methode zum simulieren von cpu-Last und Werte sind nicht einmal annähernd mit denen aus der task-manager. Ich lese die Werte einmal pro Sekunde. Ich vermute, dass dies möglicherweise aufgrund der multi-core-cpu, aber ich bin mir noch nicht sicher...
InformationsquelleAutor Buda Gavril | 2015-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nichts falsch mit Ihren Werten.
Den Grund sehen Sie Unterschiede mit dem, was der task-manager gibt, ist, dass die "CPU usage" - Wert ist etwas, was berechnet für ein gegebenes Intervall, d.h. zwischen zwei
NextValue()
Anrufe. Wenn der task-manager "nicht an seine eigenen NextValue" (wenn wir vereinfachen, wie es funktioniert) in der gleichen Zeit, die Sie tun, werden Sie nicht dieselben Ergebnisse zurückgegeben.Stellen Sie sich Folgendes Szenario vor:
Könnten Sie versuchen, um zu laichen mehrere Prozesse von Ihrer eigenen Anwendung verwenden, sollten Sie auch unterschiedliche Ergebnisse.
InformationsquelleAutor ken2k
Hier ist was ich gefunden habe: ich habe eine Liste mit
PerformanceCounter
Objekte für jeden Kern, füge ich die Prozent und dividieren Sie das Ergebnis auf die Anzahl der physischen Kerne:Hier ist der screenshot mit den Ergebnissen (wie Sie sehen können, die erste Methode ist präziser):
InformationsquelleAutor Buda Gavril