WPF元素主机内存泄漏

Mg.*_*Mg. 7 .net c# wpf memory-leaks

我在Windows窗体上使用元素主机时出现了奇怪的内存泄漏.我有一个主窗体,它打开另一个窗体,一个只有元素主机控件的窗口(此时,它没有一个wpf控件子窗口).只能打开1个主机表单.每次打开表单时,应用程序内存都会增加20Mb,当表单关闭时不会自由,因此,在打开主机表单几次之后,我的内存耗尽!现在,如果我从表单中删除元素主机,则内存保持稳定.

我一直在运行CLRProfiler和ANTS,但我发现所有问题都存在于元素主机上,而我没有找到任何解决方法.

wpfHost是开箱即用的,只是从工具栏拖到winForm.

知道怎么解决这个问题?

小智 8

如果链接再次中断,这里是解决方案(复制粘贴)

KGy于2010年10月22日6:12 发布可能的解决方法:将以下代码放入包含ElementHost控件的控件/表单的Dispose或其他release方法中.

if (elementHost != null)
{
    FrameworkElement fe = elementHost.Child as FrameworkElement;
    if (fe != null)
    {
        // Memory leak workaround: elementHost.Child.SizeChanged -= elementHost.childFrameworkElement_SizeChanged;
        SizeChangedEventHandler handler = (SizeChangedEventHandler)Delegate.CreateDelegate(typeof(SizeChangedEventHandler), elementHost, "childFrameworkElement_SizeChanged");
        fe.SizeChanged -= handler;
    }
    elementHost.Child = null;
    base.Dispose(disposing);
    elementHost.Dispose();
    elementHost.Parent = null;
    elementHost = null;
}
Run Code Online (Sandbox Code Playgroud)