2010-04-23 4 views
9

Also, ich baue eine WPF-App und machte heute eine Test-Bereitstellung, und festgestellt, dass es ziemlich schlecht funktioniert. Ich war überrascht, da wir visuelle Effekte oder Animationen nicht wirklich machen.WPF: Verbessern der Leistung für das Ausführen auf älteren PCs

Ich auf zwei Maschinen eingesetzt: die schnellste und die langsamste, die die Anwendung ausführen muss (der langsamste PC hat einen Intel Celeron 1,80 GHz mit 2 GB RAM). Die Anwendung lief auf der schnelleren Maschine ziemlich gut, war aber auf der langsameren Maschine abgehackt. Und wenn ich "abgehackt" sage, bedeutet das, dass der Cursor gesprungen ist, obwohl er gerade über jedes geöffnete Fenster der App, die den Fokus hatte, gesprungen ist.

Ich öffnete das Task-Manager-Fenster Leistung und konnte sehen, dass die CPU-Auslastung sprang, wenn die App den Fokus hatte und der Cursor sich darüber bewegte. Wenn ich einem anderen (z. B. Excel) den Fokus gab, ging die CPU-Nutzung nach einer Sekunde zurück. Dies passierte auf beiden Maschinen, aber der Hacking war nur auf der langsameren Maschine bemerkbar. Ich hatte nur sehr begrenzte Zeit, um an den Deployment-Maschinen herumzubasteln, also habe ich nicht viele detaillierte Tests durchgeführt.

Die App läuft gut auf meinem Entwicklungscomputer, aber ich sehe auch die CPU bis zu 10% dort Spike, nur den Cursor über das Fenster laufen.

Ich habe das WPF-Leistungstool von MS heruntergeladen und habe damit (auf meinem Dev-Rechner) herumgebastelt. Die docs sagen, dass dies über die "Frame Rate" Metrik im Perforator-Tool:

Für Anwendungen ohne Animation, dieser Wert nahe 0.

sein sollte Die App ist keine schwere Animation zu tun, Die Bildrate bleibt jedoch nahe 50, wenn sich der Cursor über einem Fenster befindet. Die Bildschirme, auf denen ich getestet habe, haben Spaltenüberschriften in einem Raster, die "hervorgehoben" sind, und Schaltflächen, die Farbe und Aussehen ändern, wenn sie gescrollt werden. Wenn Sie die Maus auf leere Bereiche der Fenster bewegen, werden die gleiche Bildrate und CPU-Auslastung angezeigt (scheint nicht mit diesen kleineren Animationen zusammenzuhängen).

(Ich bin auch nicht in der Lage, herauszufinden, wie man nur die beiden Standard-Tools - Perforator und Visual Profiler - in das WPF-Performance-Tool installiert. Das ist wahrscheinlich eine separate Frage).

Ich habe auch Redgates Profiling-Tool, aber ich bin mir nicht sicher, ob das die Renderleistung beleuchten kann.

Also, ich weiß, das ist nicht eine einfache Sache, ohne Besonderheiten oder Beispielcode (die ich nicht veröffentlichen kann) zu beheben. Meine Fragen sind:

  • Was sind einige allgemeine Dinge für (oder zu vermeiden) im Code suchen Leistung zu verbessern?
  • Welche Schritte kann ich mit dem WPF-Tool durchführen, um das Problem einzuschränken?
  • Ist die oben aufgeführte PC-Spezifikation (Intel Celeron 1,80 GHz mit 2 GB RAM) zu langsam, um selbst Vanille-WPF-Anwendungen ausführen zu können?

Antwort

3

Beantragen Sie BitmapEffect es auf Ihre UI-Elemente? Sie werden nicht von der GPU gehandhabt, daher kümmert sich die CPU darum, sie zu rendern. Wenn sie nicht ordnungsgemäß verwendet werden (z. B. wenn ein OuterGlowBitmapEffect auf ein großes komplexes Element angewendet wird), können sie sich erheblich auf die Leistung auswirken.

Sie können auch weiterhin versuchen, Ihre App mit einem Leistungsprofiler zu profilieren. Nur um zu sehen, ob es nicht Ihr Code ist, der dies verursacht.

0

Dies ist nicht normal für WPF - ich würde vermuten, dass einer Ihrer Entwickler Code geschrieben hat, der einen Timer im Hintergrund ausführt (oder eher eine Beschreibung, einen Mausbewegungshandler), der die Benutzeroberfläche beeinflusst .

Wenn Sie ANTS Leistungsprofiler haben (es ist wirklich nett) würde ich das über Ihre App laufen und reproduzieren das Problem.

Sobald Sie das getan haben, sollte ANTS Ihnen ziemlich schnell sagen, was das Problem ist. Wenn ANTS überhaupt nichts enthüllt und Ihnen zeigt, dass während dieser Zeit tatsächlich kein Code ausgeführt wird, würde ich fehlerhafte Grafikkartentreiber vermuten.

Sie für diese Hardware-Beschleunigung durch die Deaktivierung, indem den folgenden Registrierungsschlüssel testen, und es erneut versuchen:

HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration to 1 

Hinweis: Der DisableHWAcceleration Wert sollte ein DWORD

sein
Verwandte Themen