我在 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/