Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Elldrich Kapp Geändert vor über 9 Jahren
1
Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30
2
Daniel Greitens Managing Director bei maximago Schwerpunkt UI-Entwicklung, User Experience 2099, 2010, 2011 MVP Expression Blend Consulting, Coaching, Buchautor, Speaker Mail –daniel.greitens@maximago.de
3
Was heißt „Performance“? Keine „Hänger“ im UI Schnelle Reaktion auf Interaktion Flüssige Animation = Die „Performance“ die der Benutzer verspürt
4
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)
5
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
6
Hintergründe in Kürze
7
Tooling Performance Suite (Windows SDK) http://msdn.microsoft.com/en- us/library/aa969767.aspx http://msdn.microsoft.com/en- us/library/aa969767.aspx Snoop WPF Inspector
8
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.aspxhttp://msdn.microsoft.com/de- de/magazine/cc163328.aspx
9
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“http://msdn.microsoft.com/en-us/library/ms742196.aspx 15:50
10
Optimierung einer Anwendung von A bis Z
11
Ausgangslage Eine kleine Anwendung Mit Beispiel-Daten zum Happy-Scrolling Fesches Design Eine laufenden Animation Zum Start mit wirklich allen Faux-Pas
12
Demo Vorstellen des Zustands 15:55
13
Phase 1: Die gängigen Verdächtigen Virtualisierung? Nur auf Rendering Tier 0: –Bitmap-Effects –TileBrushes: ImageBrush, VisualBrush, DrawingBrush
14
Demo 16:05
15
Phase 2: Aufräumen Brushes in Resourcen DynamicResources vs. StaticResources Freezing
16
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
17
Freeze von Brushes Event Handler von jeder Instanz, die den jeweiligen Brush verwendet Aushebeln der GC! State Size Frozen SolidColorBrush212 Bytes Non-frozen SolidColorBrush972 Bytes
18
Freeze & StaticResource MyBrush (not freezed) MyBrush (not freezed) {DynamicResource=MyBrus h } MyBrush (freezed) {StaticResource=MyBrush } EventsPollin g Einmalig bei Instanziierung
19
Demo 16:20
20
Phase 3: Auswahl der minimalen Controls Typische Beispiele: –Rectangles statt Border –ContentPresenter statt ContentControl –Textblock statt Label
21
Demo 16:25
22
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)
23
Demo 16:40
24
Ausklang! Was sonst noch teuer ist… Grid.ShareSize ScrollBarVisibility = Auto Bindings auf ActualWidth und ActualHeight Keine FallBackValues bei Bindings
25
Links http://msdn.microsoft.com/en- us/library/ms742196.aspxhttp://msdn.microsoft.com/en- us/library/ms742196.aspx http://msdn.microsoft.com/de- de/magazine/cc163328.aspxhttp://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.paulkiddie.com/2011/10/the- importance-of-the-position-of-window- resources-element-in-wpf-xaml-markup/ http://www.kynosarges.de/WpfPerformance.ht mlhttp://www.kynosarges.de/WpfPerformance.ht ml
26
Danke! Daniel Greitens daniel.greitens@maximago.de Gerne persönlich am Stand von maximago hier auf der BASTA 16:45
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.