c# - WPF 元素宿主内存泄漏

标签 c# .net wpf memory-leaks

我在 Windows 窗体上使用元素宿主时遇到奇怪的内存泄漏。 我有一个主窗体,它打开另一个窗体,它上面只有 elementhost 控件(此时,它没有 wpf 控件子控件)。 只能打开 1 个主机表单。 每次打开表单时,应用程序内存都会增加 20Mb,关闭表单时这些内存不会释放,因此,在多次打开主机表单后,我会用完内存!。 现在,如果我从表单中删除元素主机,内存将保持稳定。

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

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

知道如何解决这个问题吗?

最佳答案

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

KGy 发表于 2010 年 10 月 22 日 6:12 一个可能的解决方法: 将以下代码放入包含 ElementHost 控件的控件/窗体的 Dispose 或其他释放方法中。

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;
}

关于c# - WPF 元素宿主内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373874/

相关文章:

c# - 异常 : Application initializing document picker is missing the iCloud entitlement. 是否设置了 com.apple.developer.icloud-container-identifiers?

c# - 无法将类型 'System.Linq.IQueryable<Model>' 隐式转换为 'Model'

c# - 如何将对象转换为未知类型 T 的 IList<T>

c# - 垃圾收集器订单

wpf - OpenGL 上方的透明窗口

c# - 组合框的两种方式数据绑定(bind)问题 - WPF

c# - [C#、.NET] : Validating users via LDAP through IdentityServer3

c# - 使用 C# ClearCase checkin 和 checkout

javascript - 从代码隐藏中修改 header 中的 javascript block

c# - ValidationRule ValidatesOnTargetUpdated NullReferenceException 在设计时