Frage

ich auf einem Windows-einig Performance-Messung von meinem Code tue und ich finde, dass ich dramatisch unterschiedliche Ergebnisse zwischen den Messungen immer bin. Ein schnell bisschen Ad-hoc-Exploration während eines langsamen zeigt im Task-Manager System Idle Prozesse fast 100% CPU-Aufnahme.

Wer weiß, was System Idle Prozesse eigentlich bedeutet und was Windows-Funktionen es ausgeführt werden kann?

NB: Ich bin nicht die Leistung Messung des Task-Manager, habe ich es nur einen Blick auf nehmen, was sonst noch während einer besonders langsamen Messung läuft

.

Bitte denken, bevor sagte das nicht verwandt ist die Programmierung und die Frage zu schließen. Ich würde es nicht fragen, wenn ich dachte, dass es Gründe waren zu sagen, es ist. In diesem Fall halte ich es klar ist, weil es in nachteiliger Weise meine Entwicklungs- und Testumgebungen und um wirkt es zu klären, ich brauche ein bisschen mehr darüber wissen. Programmierung nicht mit dem Schreiben des Codes beginnen und enden.

War es hilfreich?

Lösung

Der Leerlaufprozess macht normalerweise keine nützliche Arbeit außer den HLT Befehl ausführen, die in einen niedrigen Energiezustand, dass CPU-Kern setzt ( C1 ). Allerdings ist die Tatsache, dass Ihre Benchmark 100% CPU-Zeit nicht raubend öffnet die Tür für Spekulationen über das, was vor sich geht.

Wenn Ihre Anwendung ist single-threaded und Prüfsystems ist Multi-Core / Hyperthreaded / Multi-CPU, dann sollten Sie erwarten, für zwei Kerne rund 50% CPU-Leerlaufzeit, um zu sehen, 75% für vier, etc. Dies ist, weil die CPU-Zeit Prozentsätze in den Task-Manager sind alle Kerne. (Ich glaube, dass ältere Versionen von Windows eine Option hatten, dies zu ändern, aber ich sehe es nicht auf Vista.)

Wenn der Leerlaufprozess wird viel CPU raubend, die angeben können, dass Ihre Anwendung viel Zeit mit Schlafen verbringt. Es könnte für Daten aus einer externen Quelle warten (beispielsweise eine Festplatte oder im Netzwerk). Es könnte viel Zeit mit Warten auf Synchronisationsobjekten (z mutexes oder Ereignisse) verbringen. Es könnte auch eine Menge Zeit verbringen die Sleep() Funktion aufrufen. Profilieren Sie den Code identifizieren sollte, wo es die Zeit verbringt.

vollständig reproduzierbar Benchmark-Ergebnisse bekommen können Sie benötigt Prozessor / disk / netzwerkintensiven Hintergrund Anwendungen und Dienste (zB Suchindizierung, SMS Software-Inventarisierung, Virus-Scanning, Windows Update-Downloads, IncrediBuild / distcc) zu deaktivieren oder das Gerät zu verbinden ein isoliertes Netzwerk (oder zu keinem Netzwerk überhaupt).

Ich gehe davon aus, dass Sie eine Benchmark für Ihre Anwendung geschrieben, und dass Sie versuchen, nur die Task-Manager zu verwenden, um zu diagnostizieren, warum die Benchmark-Ergebnisse sind nicht das, was Sie erwarten. Task-Manager ist nicht eine genaue Art und Weise der Anwendungsleistung zu messen.

Andere Tipps

System Idle Prozess ist eine Art von einem Standardprozess, auf dem Windows auf dem Prozessor läuft, wenn es nichts anderes für die Ausführung zu planen. Dieser Prozess ist wie eine Haushälterin, die Dinge tut wie der Versuch, Systemleistung usw. zu speichern.

Wenn Sie die Leistung Ihres Programms sind zu messen, nicht den Windows Task-Manager verwenden. Verwenden Sie Systemmonitor statt (die Sie durch Eingabe von ‚perfmon‘ in der Befehlszeile gestartet werden). Oder noch besser, verwenden Sie einen Profiler .

Wenn Sie „System Idle-Prozess“ ist 100% Aufnahme dann im Wesentlichen Sie Maschine gebohrt ist, auf geht nichts. Wenn Sie alles los im Task-Manager addieren, subtrahieren diese Zahl von 100%, dann werden Sie den Wert haben „System im Leerlauf Prozess.“ Beachten Sie es verbraucht fast keine Erinnerung an alle und kann nicht die Leistung zu beeinträchtigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top