Silverlight 4.0 : Fuites mémoires…

Depuis peu, j’étudie plus en profondeur les fuites mémoires sous Silverlight 4.0. Je me suis aperçu après étude que depuis la sortie de la version 4.0 l’an dernier, les applications Silverlight contenaient des fuites mémoires importantes…En fait, cela vient du plugin !

En effet, si vous faites des <DataTemplate> Inline, c’est à dire dans la définition du contrôle lors de son instanciation en  Xaml, celui-ci ne se désalloue pas en mémoire… Et le plus étonnant, étant que si vous en faites un style déclaré en ressources de votre UserControl, le problème n’existe plus. Ce comportement existe sur tous les contrôles Templatisable

En particulier, je me suis aperçu que le contrôle <DataGrid> utilisant des <DataGridTemplateColumn> comportait beaucoup de fuites et qu’il n’existait a priori pas de moyen pour éviter cela ; ce qui peut poser problème lorsque l’application en comporte un certain nombre …

Heureusement, c’est depuis peu, pour ne pas dire février dernier, que le problème est corrigé dans la version du plugin 4.0.60.129.0. Mais il aura fallut attendre plus de 10 mois après sa sortie pour avoir ce correctif qui à mon sens est important ; certaines applications fonctionnant correctement sous SL3 se sont vues ne plus être fonctionnelles avec le plugin 4.0 (sans toucher au code).

Je vous conseille donc d’installer la dernière version du Plugins 4.0.60.129.0. vous verrez une consommation mémoire de votre navigateur diminuer… (pour info, elle est disponible sur Windows Update).

J’ajouterais que cette dernière version inclut des améliorations sur les appels réseaux  : http://support.microsoft.com/kb/2505882

Je vous recommande le forum Silverlight sur lequel beaucoup de développeurs mettent en évidence ce problème de fuite mémoire : http://forums.silverlight.net/forums/t/171739.aspx

Les correctifs de Microsoft datant du mois dernier : http://support.microsoft.com/kb/2495644

Enfin, pour ceux qui comme moi, effectuent des recherches autour de ces aspects de “Memory leak”, je vous oriente vers l’article suivant qui montre l’utilisation de WinDbg pour mettre en évidence les problèmes : http://luisguerrero.net/en/category/silverlight/

J’ajoute à ce billet un petit exemple de code mettant en exergue le problème (problème visible seulement pour les versions de plugin antérieures à la version 4.0.60.129.0) Sources

Nombre de vue : 40

COMMENTAIRES 2 commentaires

  1. Benjamin Baumann dit :

    Wow, ça fout les jetons de voir qu’une telle erreur a pu se glisser dans un framework si important…
    Sinon pour les fuites mémoires rien ne vaudra jamais un bon vieux valgrind, le debugger windows fait pâle figure à côté. Mais bon on n’est pas prêt d’avoir un valgrind .NET…

  2. slouge dit :

    En effet nous faisions très attention lors de nos développements en SL2 et SL3 et le passage en v4 fut très problématique pour certains clients !

AJOUTER UN COMMENTAIRE