Je souhaite disposer d'un contrôle que j'ajoute dynamiquement à mon application. Le garbage collector ne récupère pas l'objet après l'avoir quitté de son contrôle parent, et il a d'énormes bitmaps et membres privés de géométrie.Fuite de mémoire WPF avec contrôle personnalisé
Je veux être en mesure de faire quelque chose comme ceci:
foreach (ScrollItem mylabel in canvas1.Children)
{
if (mylabel.bRemove == true)
{
canvas1.Children.Remove(mylabel);
mylabel = null; // or mylabel.Dispose();
}
}
canvas1
ne peuvent pas avoir des éléments nuls dans un UIObjectCollection
je ne peux pas le mettre à null, et si je viens Remove()
il la poubelle le collecteur ne le collecte pas.
J'ai essayé de faire quelque chose comme:
myobj = mylabel;
canvas1.Children.Remove(mylabel);
myobj = null;
mais cela ne fonctionne pas non plus.
Avez-vous branché des écouteurs d'événements vers/à partir de ceux-ci? Ceux-ci sont souvent une cause pour les références restantes, empêchant ainsi le nettoyage des ordures. –
non, mais je l'ai dans une minuterie ... où theres un appel à cette minuterie toutes les 50ms environ, peut-être que le GC voit ses objets (similaires) toujours regardant – jeffbeat
Je n'ai pas beaucoup d'expérience avec WPF et les contrôles dynamiques , mais n'avez-vous pas à Disposer le contrôle créé dynamiquement? Libérez également toutes les connexions entre le contrôle créé dynamiquement et le temporisateur. Où est la minuterie? – Maarten