2016-10-06 4 views
0

Ich habe den folgenden Code:Performance (und Performance Monitor) anderes Ergebnis als Task-Manager zeigt

PerformanceCounter c = new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

Und dann benutze ich es mit: c.NextValue()

Was ich erhalte, ist etwa doppelt so hoch wie Aufgaben Manager Manager zeigt als die CPU-Auslastung. Obwohl meine CPU 2 Kerne hat, soweit ich weiß that's not supposed to make a difference. Warum passiert das? Oder irre ich mich, dass der duale Kern das verursacht? (Obwohl seit einiger Zeit auf der Suche, ich kann keine Dokumentation für eine Liste von Leistungsindikatoren finden.)

EDIT

Wie in einem Kommentar vorgeschlagen habe ich versucht, perfmon (Performance Monitor), und es zeigt die Das gleiche Ergebnis bekomme ich. Warum die Diskrepanz?

Antwort

2

Nach this blog sollten Sie "Processor Information" anstelle von "Processor" verwenden, wenn Sie den genauen Wert des Task-Managers übereinstimmen möchten. Frage ist, welcher Wert richtig ist, aber das ist eine Designentscheidung, denke ich.

Für jemanden Durchführung Performance-Tests und Analysen, die Fähigkeit CPU-Nutzungsdaten zu protokollieren über die Zeit kritisch ist. Ein Datenkollektor set kann über logman.exe konfiguriert werden, um den "% Prozessor Time" Zähler im Objekt "Processor Information" für diesen Zweck zu protokollieren.

PerformanceCounter c = new PerformanceCounter("Processor Information", "% Processor Time", "_Total"); 

sollte es tun.

+1

Danke. Aber das machte keinen Unterschied. – ispiro

+0

Hm. Interessant. Nimmst du mindestens zwei Proben mit 1 Sekunde dazwischen, die für die richtige Berechnung benötigt werden? – bastijn

+0

Passt es auch zu Perfmon-Werten? – bastijn