Silverlight ChildWindow内存泄漏

时间:2010-05-17 19:04:55

标签: silverlight

有没有人知道如何使用ChildWindow解决SL3中的内存泄漏?

请参阅下面的代码段:

 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实例时 - 每次打开和关闭子窗口时内存都会继续增加。

请帮忙。

感谢。

克里斯

1 个答案:

答案 0 :(得分:4)

据我所知,还没有正式修复。 This page描述了内存泄漏的本质:

  

... [ChildWindow]多次订阅RootVisual_GotFocus,但它只在关闭期间取消订阅一次。   这会导致ChildWindow永久保留在附加到RootVisual的GotFocus事件的内存中。

根据评论部分,您可以按如下方式修改Silverlight Toolkit代码以解决问题:

  

修改ChildWindow.cs上的ChildWindow_LostFocus函数(第731行),在再次添加之前减去RootVisual_GotFocus侦听器:

Application.Current.RootVisual.GotFocus -= this.RootVisual_GotFocus;
Application.Current.RootVisual.GotFocus += this.RootVisual_GotFocus;