有人知道如何用SL3解决ChildWindow中的内存泄漏吗?
请参阅下面的代码片段:
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;
}当我监视任务管理器中的iexplore实例时,每次打开和关闭子窗口时,内存都会继续增加。
请帮帮忙。
谢谢。
克里斯
发布于 2010-05-17 19:21:05
据我所知,目前还没有正式的解决办法。此页描述了内存泄漏的本质:
...ChildWindow多次订阅RootVisual_GotFocus,但在关闭期间只取消一次订阅。这将导致ChildWindow永久驻留在附加到RootVisual的GotFocus事件的内存中。
根据注释部分,您可以修改Silverlight Toolkit代码,如下所示,以解决问题:
修改ChildWindow.cs上的ChildWindow.cs函数(第731行),在再次添加之前减去RootVisual_GotFocus侦听器:
Application.Current.RootVisual.GotFocus -= this.RootVisual_GotFocus;
Application.Current.RootVisual.GotFocus += this.RootVisual_GotFocus;https://stackoverflow.com/questions/2851951
复制相似问题