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)