“ContentPresenter.Content”内存泄漏

Don*_*ker 5 .net memory wpf memory-leaks contentpresenter

我正在使用以下内容:VS 2010、.Net 4、WPF 和 .Net Memory Profiler 版本 4.6.40.0 Pro。它们都在 Win7 64 位上运行。我一直在使用 .Net Memory Profiler 来追踪内存泄漏,并发现了一个我不明白的问题,尽管我似乎已经修复了它。我们有一个包含三个 ContentPresenter 对象的控件。如果我在 Cleanup 方法中将 ContentPresenter 对象的 Content 属性设置为 null,则控件根本不会泄漏。如果我不清空 Content 属性,我们会遇到很大的泄漏(每个测试大约 3.5 MB)。

我在谷歌搜索中看到的结果似乎并没有直接解决这个问题。ContentPresenter 的文档也没有帮助我。这里有人明白为什么清空内容可以修复泄漏吗?有没有更好的方法来完成同样的事情?

我会注意到,ContentPresenter 之一在 WindowsFormsHost 和 BitmapSource 之间动态切换以处理空域问题。

更新:以下是清理的相关部分:

首先,将 ContentPresenter 的内容清空

AddressGridPlaceholder.Content = null;
AddressFormPlaceholder.Content = null;
MapControlPlaceholder.Content = null;
Run Code Online (Sandbox Code Playgroud)

然后清理WindowsFormsHost

if (_hoster != null)
{
    _hoster.Child = null; // Remove the map control reference first
    _hoster.Dispose();    // Then Dispose
}
Run Code Online (Sandbox Code Playgroud)

use*_*710 0

为什么你似乎没有使用控件绑定。手动使用这些东西并不好。