Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30.

Ähnliche Präsentationen


Präsentation zum Thema: "Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30."—  Präsentation transkript:

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

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) us/library/aa aspx us/library/aa 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 de/magazine/cc aspxhttp://msdn.microsoft.com/de- de/magazine/cc 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: oder erstes Ergebnis bei Google mit „WPF Performance“http://msdn.microsoft.com/en-us/library/ms 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 us/library/ms aspxhttp://msdn.microsoft.com/en- us/library/ms aspx de/magazine/cc aspxhttp://msdn.microsoft.com/de- de/magazine/cc aspx 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/ mlhttp://www.kynosarges.de/WpfPerformance.ht ml

26 Danke! Daniel Greitens Gerne persönlich am Stand von maximago hier auf der BASTA 16:45


Herunterladen ppt "Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30."

Ähnliche Präsentationen


Google-Anzeigen