2 Performance et Optimisation des Applications Windows Phone 7 Mardi 8 Février 2011 Luc Vo Van Consultant.NET/UX Microsoft France Simon Ferquel Consultant Access IT IdF
3 33 Microsoft Services: Un accompagnement global de nos clients Architecture & Planning Planification Conseil et Projets Déploiement et adoption Support Optimisation et Opération Evaluation Planification Développement Déploiement Stabilisation Opérations Support Support Premier Enterprise Strategy Consulting Services Division Services France Consultants 125 Technical Account Managers 190 Ingénieurs Support 17 Responsables de Mission 41 Partenaires référencés Division Services France Consultants 125 Technical Account Managers 190 Ingénieurs Support 17 Responsables de Mission 41 Partenaires référencés Division Services Monde pays couverts employés partenaires 44 langues parlées par nos ingénieurs Division Services Monde pays couverts employés partenaires 44 langues parlées par nos ingénieurs
4 44 Criticité du projet Maturité de la technologie Partenaires Notre engagement auprès de nos partenaires est : De leur assurer un transfert d’expertise, De leur apporter notre support sur les dernières technologies, De leur donner accès aux meilleures pratiques de mise en œuvre et de support. Nos clients et partenaires sont particulièrement satisfaits par… Le niveau d’engagement des consultants : 94% La gestion de l’équipe de projet : 92% Les compétences techniques des consultants : 91% La relation avec les équipes du client : 90% Nos clients et partenaires sont particulièrement satisfaits par… Le niveau d’engagement des consultants : 94% La gestion de l’équipe de projet : 92% Les compétences techniques des consultants : 91% La relation avec les équipes du client : 90% Notre positionnement est d’intervenir sur les projets critiques et les technologies récentes
5 Access It IdF en quelques mots… Société de services, conseil / expertise, et formation, exclusivement sur les technologies Microsoft 20+ collaborateurs spécialisés sur les techno MS, dont 11 MVP Interventions en mode : Conseil, expertise, coaching et formation Réalisation, au forfait ou en Assistance Technique.NET Plateforme Applicative Framework et langages.Net, AZURE, Silverlight, WPF/Surface, VS/TFS, Windows Phone 7,… SQL Server (SSIS, SQL, SSAS, SSRS), PowerPivot, SharePoint & on-line, Office 365,….NETCollab. BI
6 Agenda Hardware Silverlight sur Windows Phone 7 Outils et compteurs Spécificités de la CLR Windows Phone 7 Optimisations d’applications Silverlight
7 Hardware Processeur 1GHz Snapdragon Instructions ARM Résolution 480x800 GPU intégré
8 Silverlight Rendering PhoneApplicationPage LayoutRoot (Grid) TitleGrid textBlockPageTitle textBlockListTitle Content Grid Your content
9 Silverlight Threading 1 Thread UI 1 Thread de composition Plusieurs threads de travail (worker) Threads « utilisateurs » Threads de décodage de médias
10 Silverlight Threading Entrées (touch) Layout Measure et Arrange Code utilisateur Callbacks “par frame” Gestionaires d’évènements Converters… Animations non prises en charge par le GPU Animations de propriétés de type double RenderTransforms Opacity Perspective Transforms Clips rectangulaires Thread UIThread Composition
11 Silverlight Threading Thread UI Animations simples Thread de composition Composition et affichage
12 Démo Thread UI vs. Thread de composition
13 Emulateur Utilise le GPU du PC (DirectX 10 requis) Le CPU / GPU est souvent beaucoup plus puissant Utilise un seul coeur
14 Démo Différences entre émulateur et appareil
15 Outils et Compteurs
16 Compteur de Performance Application.Current.Host.Settings.EnableFrameRateCounter = true; 1.Thread de composition (fps) 2.Thread UI (fps) 3.Textures (kb) 4.# de surfaces 5.# de “IRT” 6.Fill Rate
17 FillRate Nombre de pixels inclus dans la totalité des textures passées au GPU BitmapCache augmente le Fill Rate En 800x480, fill rate == 1.0 Impact sur les performances lorsque le fill rate est trop important ( > 3 ) Fill rate < 2 jusqu’a 60 fps Fill rate > 4.5 jusqu’a 30 fps Fill rate > 6.5 jusqu’a 20 fps
18 Redraw Regions Application.Current.Host.Settings.EnableRedrawRegions = true;
19 Cache Visualizations Application.Current.Host.Settings.EnableCacheVisualization = true; Permet de voir le nombre de textures utilisées pour le rendu d’une zone de l’écran
20 Démo Utilisation des outils et résolution des problèmes
21 La CLR de Windows Phone 7 Basée sur celle du CF 3.5, estampillée 3.7 Dédiée aux appareils légers Séparation de la couche UI : XNA et Silverlight Même gestion de la mémoire et du JIT Assemblies réutilisables entre XNA et Silverlight
22 Garbage Collection
23 Garbage Collection Déclenché tous les 1 Mo alloué (non modifiable) En moyenne sur les appareils disponibles aujourd’hui, 1 Mo collecté = 10 ms. Dépend de la complexité du graphe Non générationnel, bloque le thread UI en Silverlight
24 byte[10000] Stack Garbage Collection
25 Garbage Collection Déclenché tous les 1 Mo alloué En moyenne sur les appareils disponibles aujourd’hui, 1 Mo collecté = 10 ms. Dépend de la complexité du graphe. Non générationnel, bloque le thread UI en Silverlight LINQ, voire le foreach, peuvent être gourmand, ne pas utiliser lors des manipulations à haute réactivité! Forcer = null sur les grosses structures peut hinter le GC
Utilisation mémoire
27 GC : XNA et Silverlight XNA basé sur un game loop Minimiser l’allocation dans Update et Draw, chacun est appelé 30 fois par seconde Attention à LINQ et aux foreach Bon exercice pour les développeurs Silverlight ! Silverlight basé sur de l’évènementiel Moins sensible au pauses liées au GC Profiter des interactions utilisateurs pour collecter Le feedback subtil améliore la performance perçue
28 Démo Mémoire et garbage collection
29 Just-in-Time compilation (JIT) Optimisé pour s’exécuter rapidement, plutôt que générer du code rapide JIT Sharing Les assemblies partagées ne sont jittées qu’une fois. Le code natif résultant peut être réutilisé directement
30 Silverlight Tips & Tricks
31 PerformanceProgressBar La ProgressBar en indeterminate par défaut est animée entièrement dans le thread UI PerformanceProgressBar déporte l’animation sur le thread de composition Animation de chargement plus fluide (UX : important!) Peu ou pas de ralentissement sur les manipulations
32 LowProfileImageLoader Déporte le chargement et le décodage des images vers un worker thread Accessoirement, les JPEG sont décodés en hardware, mais les PNG en software. Exemples de candidats pour JPEG : fonds de Panorama, images dans ListBoxes… lowprofileimageloader-helps-the-windows-phone-7-ui-thread-stay-responsive- by-loading-images-in-the-background.aspx
33 Panorama et Pivot Panorama charge l’intégralité de ses PanoramaItems Pivot ne charge que l’élément en cours et le prochain Repousser le chargement des données ‘IsLoading’
34 Tombstoning Evitez ApplicationSettings pour le contenu complexe (qui sérialise en XML) BinarySerializer est la méthode de sérialisation la plus performante.
35 Démo Utilisation des contrôles optimisés
36 En synthèse Identifier les problèmes potentiels en amont Framerate, consommation mémoire, temps de chargement… Surveiller à chaque changement dans l’arbre visuel Framerate, Fill Rate, Dirty regions…
37 En synthèse Tester sur un appareil, TRES SOUVENT Incorporer les éléments de design le plus tôt possible Utiliser les contrôles et comportements optimisés
38 Des questions ? Blog de Simon Ferquel Readiculous! Blog de Luc Vo Van ap ShapeChase
39 MSDN et TechNet : l’essentiel des ressources techniques à portée de clic Portail administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs