
J'ai récemment eu un souci de performance sous Windows Phone 7 qui apparaissait lors de l'utilisation du contrôle TransitionFrame fourni par le toolkit Silverlight.
Pour rappel ce contrôle permet de créer des applications Windows Phone navigantes avec prise en charge du bouton "Back" hardware.
Le "Fill Rate" de l'application dépassait tranquillement les 2.5 alors que rien ne se passait à l'écran. Bien sûr, nous avions un contrôle Panorama en page d'accueil mais celui-ci est assez bien prise en charge par le framework SL.

Et Bizarrement dès que nous nous débarrassions ce contrôle tout revenait à la normale.
Je me suis un peu penché sur le code interne du contrôle et il s'avère que c'est l'arrière plan qui pose problème. Lorsque le TransitionFrame possède un arrière plan (Background), celui-ci est réappliquer n fois par seconde, n correspondant au framerate de Silverlight c'est à dire 60 fois par secondes.
Dans notre cas d'application, nous appliquions un arrière plan au RootVisual (donc TransitionFrame) de manière dynamique. Cela permettait de faciliter les mécanismes de transition. Le mieux était donc d'avoir un Background à null tant que l'utilisateur se trouvait sur le Panorama. Puis, au dernier instant, c'est à dire dans la méthode surchargée NavigatingFrom, on lui réappliquait l'arrière plan.
Cette solution est assez efficace et évite les bugs de performance.
Je vous recommande fortement la lecture de cette page MSDN pour la conception d'applications WP7 performante. Dans un prochain poste, je montrerai comment faire des transitions performantes sous WP7.