
Je ne vous apprend rien, l’optimisation des performances est une phase importante durant le développement d’une application WPF tant au niveau du code métier que de l’interface.
J’ai eu la chance, ou la malchance, de développer un projet WPF sur un device comportant une carte graphique très limitée (ou avec driver non mis à jour), j’ai nommée la Ultra Mobile 500 et cela m’a permis de me rappeler quelques notions de bases.
Voici une petite liste de conseils qu’il est bon d’appliquer et avec lesquels j’ai obtenu de très bon résultats en terme de performance et de réponse d’interface.
- Le Canvas est le conteneur le moins gourmand
- Eviter les stretchs videos / images
- Les effets visuels proposés dans Blend sont extremement gourmands System.Windows.Media.Effects BlurEffect et DropShadowEffect il existe d’autres méthodes pour ce type d’effet.
- Eviter les images trop grandes en terme de pixel
- Ne pas appliquer de dégradés sur des zones trop importantes ou dynamiques
- Eviter d’animer des panels avec une multitude de contrôles
- Faire attention aux DataTemplate même si le graphiste est censé pouvoir appliqué tous les effets qu’il souhaite réduire le nombre de contrôle et dégradés est primordial.
- Utiliser les DynamicResources seulement quand c’est nécessaire. Pour une utilisation classique des styles se rapprochant du mode d’utilisation des CSS utiliser uniquement les StaticResources.
- Ne pas utiliser la balise Run
- L’animation d’un Canvas.Left est plus rapide qu’un TranslateTransform de l’élément Canvas.
Cette liste peut paraître à une liste de bon sens, néanmoins il peut être bon de le rappeler. En appliquant ces méthodes de développement d’interface l’application que j’ai développée est passée d’un mode “non-utilisable” (avec un framerate de 1 image par/sec) à un mode tout à fait respectable (environ 10 image par/sec).
Pour plus de lecture sur l’optimisation WPF rien de tel que la MSDN