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.