daniel greitens | maximago performanceoptimierung in wpf und silverlight user interfaces 15:30
TRANSCRIPT
![Page 1: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/1.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/2.jpg)
Daniel Greitens
• Managing Director bei maximago• Schwerpunkt UI-Entwicklung, User
Experience• 2099, 2010, 2011 MVP Expression Blend• Consulting, Coaching, Buchautor,
Speaker• Mail
![Page 3: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/3.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/4.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/5.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/6.jpg)
Hintergründe in Kürze
![Page 7: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/7.jpg)
Tooling
• Performance Suite (Windows SDK)http://msdn.microsoft.com/en-us/library/aa969767.aspx
• Snoop• WPF Inspector
![Page 8: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/8.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/9.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/10.jpg)
Optimierung einer Anwendung von A bis Z
![Page 11: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/11.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/12.jpg)
Demo
• Vorstellen des Zustands
15:55
![Page 13: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/13.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/14.jpg)
Demo
16:05
![Page 15: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/15.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/16.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/17.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/18.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/19.jpg)
Demo
16:20
![Page 20: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/20.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/21.jpg)
Demo
16:25
![Page 22: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/22.jpg)
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](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/23.jpg)
Demo
16:40
![Page 24: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/24.jpg)
Ausklang! Was sonst noch teuer ist…
• Grid.ShareSize• ScrollBarVisibility = Auto• Bindings auf ActualWidth und
ActualHeight• Keine FallBackValues bei Bindings
![Page 25: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/25.jpg)
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
![Page 26: Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30](https://reader035.vdocument.in/reader035/viewer/2022062623/55204d8449795902118d8b38/html5/thumbnails/26.jpg)
Danke!
• Daniel Greitens• [email protected]
• Gerne persönlich am Stand von maximago hier auf der BASTA
16:45