.net - "ContentPresenter.Content"内存泄漏

标签 .net wpf memory 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)。

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

最佳答案

为什么在我看来您没有使用控件绑定(bind)。手动玩这些东西并不是很好。

关于.net - "ContentPresenter.Content"内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18196845/

相关文章:

c# - 一旦 frame 导航到另一个 Page 就销毁 ViewModel 和 Page 的实例

ios - 对__bridge,_bridge_retain和_bridge_transfer的疑问

c# - 从 Azure 计时器触发器函数访问位于 Azure Blob 中的文件

wpf - 是否可以将 WPF 控件绑定(bind)到多个数据上下文?

c# - 使用简单进样器根据需要加载装配体

c++ - 如何安全删除多个指针

memory - 英特尔8086处理器

c# - DotNetZip 不从 WinZip 中提取最佳压缩

android - 如何创建多平台本地化解决方案?

javascript - 使用 ajax 发布复杂数据并在新窗口中打开返回的 PDF