C# WPF WindowsFormsHost内存泄漏

C# WPF WindowsFormsHost内存泄漏,c#,wpf,memory-leaks,windowsformshost,C#,Wpf,Memory Leaks,Windowsformshost,我有一个WPF选项卡控件,每个选项卡页中都包含一个WindowsFormsHost。 用户可以根据需要添加和删除TabPage:当用户删除选项卡时,我显然会处理子控件和主机本身 使用VS诊断工具,我发现WindowsFormsHost泄漏: 我还使用一个空的WindowsFormsHost复制了这个问题,没有内部子级,并用framework 4.0和4.7.2进行了测试。比如: <Grid> <WindowsFormsHost/> 我怎样才能解决这个问题?

我有一个WPF选项卡控件,每个选项卡页中都包含一个WindowsFormsHost。 用户可以根据需要添加和删除TabPage:当用户删除选项卡时,我显然会处理子控件和主机本身

使用VS诊断工具,我发现WindowsFormsHost泄漏:

我还使用一个空的WindowsFormsHost复制了这个问题,没有内部子级,并用framework 4.0和4.7.2进行了测试。比如:

<Grid>
    <WindowsFormsHost/>


我怎样才能解决这个问题?GC.Collect()不起作用。

解决了从父布局中删除WindowsFormsHost元素的问题:

public class WindowsFormsHostEx : WindowsFormsHost
{
    public WindowsFormsHostEx() { }

    protected override void Dispose(bool disposing)
    {
        if (this.Child != null && this.Child is IDisposable)
            (this.Child as IDisposable).Dispose();

        this.Child = null;

        //magic line!!!
        (this.Parent as Panel).Children.Remove(this);

        base.Dispose(disposing);
    }
}

究竟是什么让这成为一个“漏洞”?可能垃圾收集器还没有收集到它。泄漏是因为在15/20分钟后,内存应该被释放…可能。您应该添加一些垃圾收集调用,仅用于调试目的,以查看这是否会导致释放内存。如果没有,我同意这听起来像是个漏洞。但若它真的被发布了,那个么它只是GC慢慢来的一个例子。e、 g.您需要添加类似'GC.Collect()的内容;GC.WaitForPendingFinalizers();GC.Collect();`@不可能,不过这是个好消息。我认为你应该用你用来测试这个问题的代码来编辑这个问题。