首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >银光ChildWindow内存泄漏

银光ChildWindow内存泄漏
EN

Stack Overflow用户
提问于 2010-05-17 19:04:54
回答 1查看 1.9K关注 0票数 3

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

请参阅下面的代码片段:

代码语言:javascript
复制
 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实例时,每次打开和关闭子窗口时,内存都会继续增加。

请帮帮忙。

谢谢。

克里斯

EN

回答 1

Stack Overflow用户

发布于 2010-05-17 19:21:05

据我所知,目前还没有正式的解决办法。此页描述了内存泄漏的本质:

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

根据注释部分,您可以修改Silverlight Toolkit代码,如下所示,以解决问题:

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

代码语言:javascript
复制
Application.Current.RootVisual.GotFocus -= this.RootVisual_GotFocus;
Application.Current.RootVisual.GotFocus += this.RootVisual_GotFocus;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2851951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档