Résumé de la session sur l'optimisation des performances Windows Phone 7 aux TechDays 2011
Date de publication : 13 février 2011.
Par
Aymeric Lagier (Site Web) (Blog) (Site perso)
Voici mes notes sur la session de
Luc Vo Van
(Microsoft) et
Simon Ferquel
(Access IT) sur
la performance et l'optimisation des applications Windows Phone
7
donnée aux techdays 2011. En attendant
d'avoir la présentation
Powerpoint ainsi que le webcast, voici ce que
j'ai retenu de cette
conférence très intéressante.
1 commentaire
1. Les différents threads
2. Le piège de l'émulateur
3. Les indicateurs de performances
4. Garbage Collector
5. Astuces
6. Remerciements
1. Les différents threads
Une application Windows Phone 7 dispose de deux threads :
- le thread UI (CPU) qui s'occupe du code créé par
l'utilisateur, des événements, des converters, etc. ;
- le thread de composition (GPU) qui s'occupe lui des
animations simples, du clipping rectangulaire, de l'opacité, des
render transform et perspective transform.
Le but étant de décharger au maximum le thread UI pour
garder une
application fluide et agréable à utiliser.
2. Le piège de l'émulateur
Lorsque vous testez vos applications sur votre PC grâce à
l'émulateur
fourni par Microsoft, il faut savoir plusieurs choses
:
- l'émulateur émule un processeur x86 et non un
processeur ARM comme sur les téléphones WP7. Certaines choses
diffèrent comme la gestion des doubles ;
- même si vous disposez d'un Core 2 Duo, l'émulateur
n'utilisera qu'un seul coeur ;
- le GPU utilisé dans l'émulateur est celui de votre PC
(qui est bien plus puissant que celui de votre téléphone).
N'oubliez donc pas de tester régulièrement votre
application sur votre
téléphone.
3. Les indicateurs de performances
Dans le constructeur de la classe App de votre
application
(App.xaml.cs), vous pouvez dé-commenter certaines lignes
afin
d'activer les outils d'analyse de performances.
Application.Current.Host.Settings.EnableFrameRateCounter = true;
Application.Current.Host.Settings.EnableRedrawRegions = true;
Application.Current.Host.Settings.EnableCacheVisualization = true;
|
EnableFrameCounter
est activé par défaut et affiche des petits compteurs sur la droite
de l'application (cf. capture ci-dessous).
|
1) Thread de composition (bonne valeur : environ 60)
|
| 2) Thread UI (si la valeur est faible, la réaction de
l'UI est moins bonne) |
| 3) Textures (mémoire utilisée par les textures) |
| 4) # surface |
| 5) # IRT |
| 6) Fill rate (représente le nombre de pixels dessinés par
frame). Une valeur supérieure à 3 implique de mauvaises
performances. |
| |
EnableRedrawRegions
permet de savoir quelles zones sont redessinées sur chaque frame.
EnableCacheVisualisation
définit quelles zones de l'écran sont rendues par le GPU.
4. Garbage Collector
Sur Windows Phone 7, le garbage collector est déclenché à chaque fois
qu'un mégaoctet est alloué. Lorsqu'il est déclenché, le GC bloque
le thread UI (et donc l'interface graphique).
Pour rendre ce processus moins visible, il est conseillé d'appeler
la méthode
GC.Collect()
lorsque l'utilisateur change de page ou déclenche un évènement. Si
c'est à l'initiative de l'utilisateur, il s'attend à avoir un temps
de chargement et ,ne sera donc pas surpris.
Pour éviter d'instancier un nombre important d'objets, il est
préférable d'éviter au maximum l'utilisation de Linq et foreach.
Il est possible de connaître la quantité de mémoire utilisée par
l'application :
DeviceExtendedProperties.GetValue("ApplicationCurrentMemoryUsage")
|
ainsi que la quantité maximale de mémoire que l'application a utilisé
DeviceExtendedProperties.GetValue("ApplicationPeakMemoryUsage")
|
5. Astuces
Voici quelques astuces fournies par les deux intervenants :
- ne pas utiliser de clipping rond (celui-ci est géré par le CPU et non par le GPU comme pour le clipping rectangulaire) ;
- utiliser des JPEG plutôt que des PNG (le décodage des PNG se fait au niveau logiciel alors que celui des JPEG se fait au niveau matériel) ;
- préférer le contrôle Pivot au contrôle Panorama car celui-ci est virtualisé et ne charge que les pages précédentes courantes et suivantes contrairement au Panorama qui charge toutes les pages ;
- dans le cas d'un Panorama, mettez les éléments de toutes les pages (sauf la page courante) en collapsed ;
- pour faire passer un élément du blanc au gris, utilisez la propriété Opacity (gérée par le GPU).
6. Remerciements


Copyright © 2011 Aymeric Lagier. Aucune reproduction, même partielle, ne peut être faite
de ce site et de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 €
de dommages et intérêts.
Cette page est déposée.