Salut à tous,

Je viens de passer quelques lonnngggues heures sur un problème de memory leak, et semble l'avoir "résolu", d'une manière logique mais surprenante... J'aimerais avoir votre point de vue sur ce problème.

Contexte :

- framework .Net 1.1
- une appli qui charge une centaine de composants maisons "B" dans un panel "A".
- les fonctionnalités de l'appli amènent à vider ce panel A pour le remplir avec d'autres composants B pour rafraichir les datas.

- pour vider mon panel A je faisais un simple A.controls.clear
==> Constat #1 : après ce clear, aucune baisse de la mémoire consommée.

- j'ai donc procédé autrement : while A.controls.count>0 : A.controls(0).dispose
==> Constat #2 : pas mieux

... je vous passe les autres tentatives de GC.Collect, etc...

A coup de débug, j'ai fini par comprendre que certains objets (Tooltip et Timer) de B n'étaient pas libérés par les B.Dispose.

J'ai donc résolu mon problème en :
1> déclarant Private à la classe B tous ces objets Timer et ToolTip
2> overloadant le Dispose de B afin et d'y libérer à la mano les objets Timer et ToolTip ci-dessus...
3> faisant donc un while A.controls.count>0 : A.controls(0).dispose

Et là ça marche ! Plus aucune fuite

Mais je suis surpris que :
- le A.controls.clear ne libère pas naturellement de la mémoire les controls B supprimés (les B.Dispose ne sont pas appelés)
- le B.dispose ne libère pas naturellement les objets Timer et Tooltip créés par B

Votre avis ? Y' a t'il qqle chose que m'échappe dans ce framework...?