2 Stimmen

WPF Animation FPS vs. CPU-Auslastung - Erwarte ich zu viel?

Ich arbeite an einem Bildschirmschoner für meine Frau, http://cchearts.codeplex.com/ und obwohl ich die FPS auf niedrigeren Rechnern verbessern konnte, scheint die CPU-Auslastung immer noch sehr hoch zu sein.

Hier sind einige Zahlen, die ich aus einigen 5-minütigen Stichprobenperioden ermittelt habe:

~60FPS 35% Durchschnitt CPU auf Core 2 Duo T7500 @ 2.2GHz, 3GB ram, NVIDIA Quadro NVS 140M (128MB), Vista [Mein Entwicklungs-Laptop]

~40FPS 50% durchschnittliche CPU auf Pentium D @ 3.4GHz, 1.5GB ram, Standard VGA Grafikkarte (unbekannt), 2003 Server [Ein beschissener Desktop]

Ich kann die niedrigere Framerate und die höhere CPU-Auslastung auf dem beschissenen Desktop verstehen, aber es scheint immer noch ziemlich hoch zu sein, und 35% auf meinem Dev-Laptop scheint auch hoch zu sein.

Ich möchte wirklich die Anwendung zu analysieren, um mehr Details zu erhalten, aber ich habe Probleme dort auch, so dass ich mich frage, wenn ich etwas falsch mache (nie profiliert WPF vor).

WPF Performance Suite:

Fehler beim Prozessstart

Kann nicht an Prozess angehängt werden: CCHearts.exe Möchten Sie ihn beenden?

Diese Fehlermeldung tritt auf, wenn ich nach dem Startversuch auf Abbrechen klicke. Wenn ich nicht auf "Abbrechen" klicke, bleibt das Programm im Leerlauf stehen und wartet wohl darauf, angehängt zu werden.

Performance Explorer:

Konnte nicht starten C:\Projects2\CC.Hearts\CC.Hearts\bin\Debug (USEVISUAL) \CCHearts.exe. Der letzte Versuch, ein Profil der Anwendung zu erstellen, war nicht erfolgreich. Bitte starten Sie die Anwendung neu.

Ausgabefenster von Performance:

Profiling gestartet. Profiling-Prozess-ID 5360 (CCHearts). Prozess-ID 5360 wurde beendet. Daten geschrieben in C:\Projects2\CC.Hearts\CCHearts100608.vsp. Profiling beendet. PRF0025: Es wurden keine Daten gesammelt. Profilerstellung abgeschlossen.

Ich stecke also fest und möchte die Leistung verbessern, habe aber keine konkrete Möglichkeit, den Engpass zu ermitteln. An diesem Punkt war ich relativ erfolgreich beim Dartwerfen, aber jetzt bin ich darüber hinaus :)


Zusammenfassung:

Bis jetzt gibt es viele Fortschritte...

Performance Explorer

Problem: Es funktionierte nicht, vage Fehlermeldung.

Lösung: Benutzt die Kommandozeilenversion um eine echte Fehlermeldung zu erhalten, die mich auf diese Seite verwies Gewinde und wies darauf hin, dass es eine Symantec-DLL war, die mich blockierte. Durch Setzen des folgenden Registrierungsschlüssels wurde das Problem behoben:

[HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Services\SysPlant ]

"Start"=dword:00000004

WPF Performance Suite

Problem: Es funktionierte nicht, keine Fehlermeldung.

Lösung: Verwenden Sie die für .NET 4 entwickelte WPF Performance Suite aus dem Windows SDK 7.1 anstelle der vorherigen Version von Windows SDK 7 (ich komme mir dumm vor :-P)

WPF-Animation

Problem: Hoher CPU-Verbrauch im Vergleich zu den FPS/der wahrgenommenen Arbeitslast.

Lösung: Viele kleine Verbesserungen hier und da. Aber die RIESIG Verbesserung war Zwischengespeicherte Komposition wie von Jeremiah Morrill hervorgehoben. Überprüfen Sie die Änderungssätze .

0 Stimmen

Auf einem Core 2 Duo E6600 / GeForce 8800GT (beide 3 Jahre alt) mit einer Auflösung von 1920x1200 läuft Ihr Bildschirmschoner reibungslos mit 60 FPS bei durchschnittlich 10-15% CPU-Nutzung. Ich würde mir nicht viel Mühe geben. Versuchen Sie zu setzen RenderOptions.CachingHint zu Cache auf Ihre Herzen aber, da Sie WPF 4 verwenden.

0 Stimmen

Danke, dass Sie sich das angesehen haben, und es ist gut zu wissen, dass es auf einem anderen Rechner gut läuft. Der Hauptgrund, warum ich versuche, mehr Leistung aus ihm herauszuholen, ist, dass er die sekundären Kühllüfter auf dem oben erwähnten "beschissenen Desktop" anwirft. Das scheint mir ein übermäßiger Stromverbrauch für eine Anwendung zu sein, die im Leerlauf des PCs laufen soll, hehe. So oder so bin ich sehr daran interessiert, herauszufinden, was mich daran hindert, ein Profil zu erstellen.

6voto

Jeremiah Morrill Punkte 4247

Ich habe Ihren Code heruntergeladen und sah ~20-28% CPU-Auslastung auf meinem Quad-Core 2.6ghz. Durch das Hinzufügen von Cache-Zusammensetzung, war ich in der Lage, es auf ~6-8% CPU zu bekommen.

Ich habe mit "DEBUG" kompiliert, nicht mit "DEBUG(USEVISUAL)", und in Heart.xaml habe ich den BitmapCache zum Pfad hinzugefügt:

Pfad CacheMode="BitmapCache" ...

0voto

David Basarab Punkte 69965

Sie wollen nicht übermäßig optimieren. Die erste Frage, die beantwortet werden muss, ist, was sind die meisten Bildschirmschoner Leistung?

Wenn alles 50 % der CPU beansprucht, würde ich mir keine Sorgen machen (ich bezweifle, dass das der Fall ist). Wenn Sie Zyklen am besten vor nur blind werfen Darts sparen wollen, stellen Sie sicher, dass Sie wirklich die 3D-Aspekte von WPF verstehen.

Hier ist der beste Ort für den Anfang

Maximierung der WPF 3D-Leistung

0voto

Dan Bryant Punkte 27022

Auf einem Celeron 1.1Ghz habe ich eine ähnlich hohe CPU-Auslastung (~95%) festgestellt, aber ich habe nie eine Leistungsverschlechterung durch das Einschalten der Animation bemerkt. Ich habe die FPS nie quantifiziert, aber ich vermute, dass sie ziemlich niedrig waren. Ich habe den Eindruck, dass WPF eine opportunistische Ressourcennutzungsstrategie verfolgt, indem es so viel wie möglich nutzt, um die bestmögliche Qualität zu erzielen, aber nicht so viel, dass es andere Verarbeitungsprozesse beeinträchtigt. Wenn Sie die CPU mit anderen Aufgaben belasten, vermute ich, dass die CPU-Nutzung im Zusammenhang mit der Grafik entsprechend sinken wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X