Est-ce que quelqu'un sait comment résoudre la fuite de mémoire dans SL3 avec ChildWindow?Silverlight ChildWindow Memory Leak
Se reporter à l'extrait de code ci-dessous:
private void Button_Click(object sender, RoutedEventArgs e)
{
var window = new ChildWindow();
window.Closed += new EventHandler(window_Closed);
window.Show();
}
void window_Closed(object sender, EventArgs e)
{
((ChildWindow)sender).Closed -= new EventHandler(window_Closed);
WeakReference reference = new WeakReference(sender);
GC.Collect();
GC.WaitForPendingFinalizers();
bool isControlAlive = a.IsAlive;
}
Il affiche toujours comme toujours « en vie » - et quand je surveille l'instance iexplore dans le Gestionnaire des tâches - la mémoire continue d'augmenter chaque fois que j'ouvrir et fermer la Fenêtre enfant.
Aidez-nous s'il vous plaît.
Merci.
Chris
Notez qu'il peut être plus que l'événement GotFocus qui est à l'origine d'un problème. L'événement SizeChanged semble également être un coupable .. –
J'ai lu le commentaire sur l'événement GotFocus - n'était pas au courant de l'événement SizeChanged. Il s'agit donc essentiellement d'un gestionnaire d'événements dont il faut se désabonner. Il s'agit simplement de passer en revue le code de la classe ChildWindow pour savoir de quel événement il s'agit. – Chris
Ce problème semble être résolu dans Silverlight 5. Il existe un champ 'private bool _attachedRootVisualListener' dans la classe' System.Windows.Controls.ChildWindow', qui est vérifié avant de s'abonner à 'RootVisual_GotFocus'. – apdevelop