我正在使用以下产品: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)。
我在 Google 搜索中看到的结果似乎并没有直接解决这个问题。ContentPresenter 的文档也没有帮助我。这里有谁明白为什么将内容归零修复了泄漏?有没有更好的方法来完成同样的事情?
我会注意到 ContentPresenter 之一在 WindowsFormsHost 和 BitmapSource 之间动态切换以处理空域问题。
更新:这里是清理的相关部分:
首先,取消 ContentPresenter 的
AddressGridPlaceholder.Content = null;
AddressFormPlaceholder.Content = null;
MapControlPlaceholder.Content = null;
然后清理 WindowsFormsHost
if (_hoster != null)
{
_hoster.Child = null; // Remove the map control reference first
_hoster.Dispose(); // Then Dispose
}