260 likes | 397 Views
Windows Phone 7: Silverlight != Silverlight. Zur Person. Weblog: http://blogs.compactframework.de/Peter.Nowak http://wp7buch.wordpress.com Twitter: @PeNoWiMo Mail: Peter.Nowak@hotmail.de. Agenda. Wieso ist Silverlight != Silverlight? Technische Hintergründe
E N D
Zur Person Weblog: http://blogs.compactframework.de/Peter.Nowak http://wp7buch.wordpress.com Twitter: @PeNoWiMo Mail: Peter.Nowak@hotmail.de
Agenda • Wieso ist Silverlight != Silverlight? • Technische Hintergründe • Unterschiede zum „großen“ Silverlight • Performance vs Architektur • Tipps und Tricks für performantere Anwendungen
WP7: SL != SL „It isn't 'Silverlight Lite', it isn't 'Silverlight Different', it's Silverlight.“ Scott Guthrie, MS Vice President, MIX 2010 Aus technischer Sicht falsch!!!
Silverlight für WP7 • Silverlight für WP7 basiert auf Silverlight 3 • „Silverlight 3 + x“ Silverlight Silverlight für WP7 „.NET Framework“ .NET Compact Framework „3.7“
Das bietet Silverlight 3 nicht • Gestenorientierte Steuerelemente • Auswahl der Eingabemethoden / SIP-Support für TextBox • Zugriff auf Gerätefunktionen • Chooser und Launcher • Application Bar • Cross-Domain Zugriff „Out of the box“ • Einen Renderthread!
Hardware • Stetige, schnelle Netzwerkverbindung • Starke CPU • „Unlimitierter“ Speicher • Begrenzter Akku • Akkuschonende CPU • Limitierte / keine, „langsame“ Netzwerkverbindung • Begrenzte Darstellungsoberfläche
Weitere Probleme • „Verwöhnte“ Entwickler • Frameworks • Starke Hardware • Over Engineering(http://it-republik.de/dotnet/artikel/Patternitis-3534.html) • Besp.: Benötige ich MVVM und Dependency Injection?
Lösungsmöglichkeiten • Best Practices • Vorgehensmodell • Silverlight • UI und Animationen • Weitere Optimierungen • Frameworks die Helfen
Vorgehensmodell • Fragekatalog: • Ist das was ich tue das schnellstmögliche? • Kann ich es auf Größe / Geschwindigkeit hin optimieren? • Brauche ich dieses Pattern / dieses Framework wirklich? • Wird diese Animation wirklich benötigt?
Best Practices • Laden von Daten verzögern • Daten cachen, wo möglich • Bessere Geschwindigkeit • Ggfs. kein Netzwerk vorhanden • Nur Daten darstellen, die benötigt werden • Ggfs Paging einsetzen für ListBoxen • Alternativ DetailsPage benutzen
UI Thread vs Render Thread • UI Thread: • Operationen werden auf der CPU ausgeführt • CPU Arbeit verbraucht mehr Strom • Aufgaben: • Benutzereingaben • Parsen von XAML • Zeichnen visueller Elemente bei Instanziierung • … • Render Thread: • Wird auf der GPU ausgeführt • Stromsparender • Aufgaben: • Transparenz • Skalierung • Rotation • Verschiebung • Projektion
Grafiken • PNG vs. JPEG vs. BMP • JPG schnelle als PNG beim Laden durch den fehlenden Alphakanal • BMP generell zu groß • Grafiken nach Möglichkeit direkt in der Zielgröße verwenden • Vektor- vs. Bitmapgrafik • Größe vs Geschwindigkeit • Skalierung • Cachen von Netzwerkgrafiken
Steuerelemente • ListBox Optimierungen • DeferredLoadListBox & LowProfileImageLoaderhttp://bit.ly/ajnDch • ProgressBar Optimierungen • PerformanceProgressBar von Jeff Wilcoxhttp://www.jeff.wilcox.name/2010/08/performanceprogressbar/ • Verlagert die Arbeit vom UI Thread in den Render Thread Sample
Steuerelemente • Pivot ist performanter als Panorama • Visibility vs. Opacity • Opacity ist schneller, verbraucht jedoch mehr Speicher • DataTemplates sollten feste Größen besitzen • Templateerweiterungen vermeiden, wo möglich
Datenreduktion • Je weniger Daten verarbeitet werden, desto höher ist die Geschwindigkeit • Netzwerk • Verarbeitungsgeschwindigkeit XML DataContract JSON Binary schneller
Datenreduktion • Untersuchungen von Jevgeni Tšaikinhttp://www.eugenedotnet.com/2010/12/windows-phone-7-serialization-comparison
Datenreduktion • Kombination mit ZIP möglich • Nachteile: • Interoperabilität sinkt • Lesbarkeit wird verringert
Assemblygröße • Content- vs Ressource-Dateien • Content lädt schneller • Anwendungen laden schneller • Assemblies ggfs. splitten, wenn diese zu groß werden • Satellitenassemblies werden nur bei Bedarf nachgeladen
Weitere Tipps & Tricks • Konstruktor vs. Loaded-Ereignis • Verlagern von Code in das Loaded-Ereignis, wo sinnvoll • Alernativ LayoutUpdated-Ereignis • Quellcode schneller als XAML • XAML muss erst geparst werden! • Datenbindung langsamer als direktes zuweisen • DispatcherTimer nur, wenn nötig • Page Stacking vermeiden
Zusammenfassung • Silverlight / Silverlight für WP7 sind unterschiedlich • Hardwareplattform erfordert ein Umdenken • Performance != Komfort für den Entwickler • Optimierung • Planung • Steuerelemente • Datenreduktion • Tipps & Tricks
Wir sehen uns wieder! Konferenz speziell zu C++ 05. – 06. Mai 2011, direkt am Chiemseecpp.ADC2011.de Trainings und Events der ppedv Mehr als 100 verschiedene Trainings auf Microsoft-Technologien spezialisiert 11 Standorte in D & AT Maßgeschneiderte Trainings direkt bei Ihnen vor Ort! www.ppedv.de
Hat Ihnen mein Vortrag gefallen?Ich freue mich auf Ihr Feedback!
Vielen Dank! Peter Nowak