Download - Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30
Daniel Greitens | maximago
Performanceoptimierung in WPF und Silverlight User Interfaces
15:30
Daniel Greitens
• Managing Director bei maximago• Schwerpunkt UI-Entwicklung, User
Experience• 2099, 2010, 2011 MVP Expression Blend• Consulting, Coaching, Buchautor,
Speaker• Mail
Was heißt „Performance“?
• Keine „Hänger“ im UI• Schnelle Reaktion auf Interaktion• Flüssige Animation
• = Die „Performance“ die der Benutzer verspürt
Fokus dieser Session
• Bestandteil:– Optimierungen an Standard-Komponenten
(Gesamtaufbau, Resources, Controls, …)– Normale Datenvisualisierung (Grid,
DataTemplates und Co.)• Nicht Bestandteil:
– Performance von Business Logic– Performance von Services– Performance von grobem Unfug (Gigatonnen
an Daten, Eierlegende 3d-Party-AllInOne-Lösungen, 3D mit Videotexturen per Citrix)
Agenda
• Hintergründe– Der UI-Thread– Rendering Tiers
• Vorstellung der Demo-Anwendung• Phase 1: Die gängigen Verdächtigen• Phase 2: Aufräumen: Static, Freeze und
Co.• Phase 3: Auswahl der minimalen
Controls• Phase 4: Deeper• Ausklang! Was sonst noch teuer ist…
15:40
Hintergründe in Kürze
Tooling
• Performance Suite (Windows SDK)http://msdn.microsoft.com/en-us/library/aa969767.aspx
• Snoop• WPF Inspector
Der UI-Thread• Regulär ein Thread, in dem das gesamte UI
läuft• Auslastende Prozesse blockieren sofort das
UI (z.B. Service-Aufrufe, auch asynchrone!)• Zusätzliche Thread-Verwaltung per
Dispatcher• Oder einfacher per BackgroundWorker
• http://msdn.microsoft.com/de-de/magazine/cc163328.aspx
Rendering Tiers• “A rendering tier defines a level of graphics hardware capability
and performance for a device that runs a WPF application.”
• Rendering Tier 0 – No graphics hardware acceleration. All graphics features use software
acceleration. The DirectX version level is less than version 9.0.• Rendering Tier 1
– Some graphics features use graphics hardware acceleration. The DirectX version level is greater than or equal to version 9.0.
• Rendering Tier 2– Most graphics features use graphics hardware acceleration. The
DirectX version level is greater than or equal to version 9.0.
• Quelle: http://msdn.microsoft.com/en-us/library/ms742196.aspx oder erstes Ergebnis bei Google mit „WPF Performance“
15:50
Optimierung einer Anwendung von A bis Z
Ausgangslage
• Eine kleine Anwendung• Mit Beispiel-Daten zum Happy-Scrolling• Fesches Design• Eine laufenden Animation
• Zum Start mit wirklich allen Faux-Pas
Demo
• Vorstellen des Zustands
15:55
Phase 1: Die gängigen Verdächtigen
• Virtualisierung?• Nur auf Rendering Tier 0:
– Bitmap-Effects– TileBrushes: ImageBrush, VisualBrush,
DrawingBrush
Demo
16:05
Phase 2: Aufräumen
• Brushes in Resourcen• DynamicResources vs. StaticResources• Freezing
StaticResource vs. DynamicResource
• StaticResource– Wert wird einmalig bei Instanziierung
abgeholt– Muss vor erstem Referenzieren instanziiert
sein• DynamicResource
– Fragt bei jedem Render-Vorgang aktuellen Wert ab
– Berücksichtigt nur das aktuelle Assembly– Wird automatisch von Blend gesetzt
Freeze von Brushes
• Event Handler von jeder Instanz, die den jeweiligen Brush verwendet
• Aushebeln der GC!
State SizeFrozen SolidColorBrush 212 BytesNon-frozen SolidColorBrush 972 Bytes
Freeze & StaticResource
MyBrush(not freezed)
{DynamicResource=MyBrush }
MyBrush (freezed)
{StaticResource=MyBrush }
Events
Polling
Einmalig bei Instanziierung
Demo
16:20
Phase 3: Auswahl der minimalen Controls
• Typische Beispiele:– Rectangles statt Border– ContentPresenter statt ContentControl– Textblock statt Label
Demo
16:25
Phase 4: Deeper
• Custom- an Stelle von User Controls– User Control: Jede Instanz wird geparsed– Custom Control: Template wird EINMAL
geparst• Virtualisierung macht nur mit Recycling
der Container Sinn!• Anzahl Instanzen an
ResourceDictionaries minimal halten– ResourceDictionaires nur einmal
instantziieren!– (Oder unsere SharedResourceDictionaries
nutzen)
Demo
16:40
Ausklang! Was sonst noch teuer ist…
• Grid.ShareSize• ScrollBarVisibility = Auto• Bindings auf ActualWidth und
ActualHeight• Keine FallBackValues bei Bindings
Links
• http://msdn.microsoft.com/en-us/library/ms742196.aspx
• http://msdn.microsoft.com/de-de/magazine/cc163328.aspx
• http://www.paulkiddie.com/2011/10/the-importance-of-the-position-of-window-resources-element-in-wpf-xaml-markup/
• http://www.kynosarges.de/WpfPerformance.html
Danke!
• Daniel Greitens• [email protected]
• Gerne persönlich am Stand von maximago hier auf der BASTA
16:45