daniel greitens | maximago performanceoptimierung in wpf und silverlight user interfaces 15:30

26
Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:3 0

Upload: elldrich-kapp

Post on 06-Apr-2015

114 views

Category:

Documents


1 download

TRANSCRIPT

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

Daniel Greitens | maximago

Performanceoptimierung in WPF und Silverlight User Interfaces

15:30

Page 2: 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

[email protected]

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

Was heißt „Performance“?

• Keine „Hänger“ im UI• Schnelle Reaktion auf Interaktion• Flüssige Animation

• = Die „Performance“ die der Benutzer verspürt

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

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)

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

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

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

Hintergründe in Kürze

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

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

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

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

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

Optimierung einer Anwendung von A bis Z

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

Ausgangslage

• Eine kleine Anwendung• Mit Beispiel-Daten zum Happy-Scrolling• Fesches Design• Eine laufenden Animation

• Zum Start mit wirklich allen Faux-Pas

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

Demo

• Vorstellen des Zustands

15:55

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

Phase 1: Die gängigen Verdächtigen

• Virtualisierung?• Nur auf Rendering Tier 0:

– Bitmap-Effects– TileBrushes: ImageBrush, VisualBrush,

DrawingBrush

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

Demo

16:05

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

Phase 2: Aufräumen

• Brushes in Resourcen• DynamicResources vs. StaticResources• Freezing

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

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

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

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

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

Freeze & StaticResource

MyBrush(not freezed)

{DynamicResource=MyBrush }

MyBrush (freezed)

{StaticResource=MyBrush }

Events

Polling

Einmalig bei Instanziierung

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

Demo

16:20

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

Phase 3: Auswahl der minimalen Controls

• Typische Beispiele:– Rectangles statt Border– ContentPresenter statt ContentControl– Textblock statt Label

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

Demo

16:25

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

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)

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

Demo

16:40

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

Ausklang! Was sonst noch teuer ist…

• Grid.ShareSize• ScrollBarVisibility = Auto• Bindings auf ActualWidth und

ActualHeight• Keine FallBackValues bei Bindings

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

Danke!

• Daniel Greitens• [email protected]

• Gerne persönlich am Stand von maximago hier auf der BASTA

16:45