我的 WPF 导航中是否存在内存泄漏?

2023-11-22

我正在检查 WPF 应用程序以查找内存泄漏(使用 ANTS Memory Profiler 5.1),并且我不断看到一些页面和控件在不应该占用的情况下占用了内存。

因此,我转到对象保留图,看看是什么让它们保留在周围,我在每个页面上都看到了这一点:

对象保留图 http://img683.imageshack.us/img683/3013/ants.jpg

问题是,我在每个页面上都将 KeepAlive 设置为 false,并且我认为用户控件上不存在这样的属性。

谁能告诉我我应该寻找什么?这到底是内存泄漏还是 WPF 应用程序的正常行为?


是的,根据您提供的信息,您存在内存泄漏。当您找到引用链并且它不在您的代码中时,最简单的方法是...... Reflector。

图片说:JournalEntryKeepAlive._keepAliveRoot字段保存对象的引用。让我们进入 Reflector 看看这个家伙是如何迷上我们的对象的。

这次很容易,所有的痕迹都通向NavigationService.MakeJournalEntry()函数,然后到NavigationService.IsContentKeepAlive()。这里是:

internal bool IsContentKeepAlive()
{
    bool keepAlive = true;
    DependencyObject dependencyObject = this._bp as DependencyObject;
    if (dependencyObject != null)
    {
        keepAlive = JournalEntry.GetKeepAlive(dependencyObject);
        if (!keepAlive)
        {
            PageFunctionBase base2 = dependencyObject as PageFunctionBase;
            bool flag2 = !this.CanReloadFromUri;
            if ((base2 == null) && flag2)
            {
                keepAlive = true;
            }
        }
    }
    return keepAlive;
}

现在你知道规则了。如果满足以下条件,则对象将保留在内存中:

  • 它不是一个依赖对象;
  • 附加属性 JournalEntry.KeepAlive 为 true;
  • 它不是 PageFunction,并且无法从 Uri 重新加载。

经过这项调查后,可能值得阅读更多有关日志条目.KeepAliveMSDN 上的属性。

这个策略帮助我找到了很多与记忆相关的昆虫。希望它也对你有帮助:)。

PS:如果您在查找此特定泄漏时仍然遇到问题,您可以粘贴最小的代码示例,以便我们重现它并为您提供更正确的答案。

干杯, 安瓦卡

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 WPF 导航中是否存在内存泄漏? 的相关文章

  • 在 .NET 4 下运行的 .NET 2 和 .NET 4 程序集有什么区别

    我维护一个 NET 2 0 库 最近它的用户开始要求 NET 4 版本 我可以在 Visual Studio 中复制现有项目 设置Target Framework to NET Framework 4 0并完成它 但是在 NET 4 下运行
  • 当视图模型类型为包含超过 4 个项目的元组时,Asp.net mvc 2 .net 4.0 出现错误

    当我在 Asp net mvc 2 net 4 0 中使用模型类型 Tuple 创建强类型视图时 当 Tuple 具有超过 4 个项目时 我会收到错误 示例1 视图类型是Tuple
  • 使用AOP技术拦截ADO.Net

    我有相当大的代码库 使用各种不同的 ADO 技术 即一些 EF 在某些情况下直接使用 ADO Net 我想知道是否有任何方法可以全局拦截任何 ADO Net 调用 以便我可以开始审核信息 例如执行的确切 SQL 语句 花费的时间 返回的结果
  • 使用“new()”和“.StartNew()”创建新实例有什么区别?

    来自我对问题的 回答 任务中的秒表似乎在所有任务中都是累加的 只想测量任务间隔 https stackoverflow com a 16259019 200449 创建新的项目之间可能存在哪些差异跑表 http msdn microsoft
  • 是否曾经建议使用 ECB 密码模式?

    判断从这篇关于密码模式的维基百科文章 http en wikipedia org wiki Block cipher modes of operation以及我听说过的有关 ECB 的其他事情 这是一个很大的禁忌 并且可能会泄露有关您的加密
  • 如何识别单击的按钮属于哪个列表框项?

    在 WPF 编程中 我在编写按钮单击事件处理程序时遇到问题 因为该按钮位于列表框项目 数据模板的一部分 内 当单击该按钮时 我无法判断它属于哪个项目 有什么解决办法吗 求救 您似乎已将列表框绑定到集合 并且您的按钮是数据模板或项目模板的一部
  • 如何将当前应用程序域的程序集动态加载到c#项目中?

    我正在尝试加载第三方assemblies 动态地到项目并使用reflection创建其类型的实例 I used Assembly LoadFrom Assembly1 dll Assembly LoadFrom Assembly2 dll
  • 等待运算符错误

    我的代码有问题 我怎么解决这个问题 这个问题出现在await操作符中 public MyModel HttpClient client new HttpClient HttpResponseMessage response await cl
  • 更改实体的可访问性

    我想建立一个内部实体 我已将实体 其标量属性和导航属性更改为内部 当我尝试构建它时出现此错误 错误 6036 EntityType 文件 具有 内部 可访问性 EntitySet 文件 具有具有 公共 可访问性的 get 属性 Entity
  • 检查 SSRS 报告自定义代码中的 Active Directory 组成员资格表单

    我正在构建 SQL Server Reporting Services SSRS 报告 查看报告的最终用户可以选择某些输入参数 在本例中为位置 用户可以选择的位置取决于 Active Directory 组成员身份 因此我尝试在自定义报告功
  • 从 AuthorizeAttribute 继承的属性不起作用

    我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性 目标是防止用户在没有特定角色 或更高角色 的情况下访问某些控制器或控制器方法 根据到目前为止我所读到的问题 我创建了一个继承 AuthorizeAttribute
  • DateTime.Ticks 没有 100 ns 的分辨率? [复制]

    这个问题在这里已经有答案了 可能的重复 C DateTime Now 精度 https stackoverflow com questions 2143140 c sharp datetime now precision SO 有一些关于
  • 使用 WPF 动态加载内容

    好的 我有一个容器 我为其创建了两个数据模板 基本上 一个模板将显示 5 个文本框 其中包含绑定到它们的对象数据 另一个模板将显示一个用于添加该特定对象的按钮 我对 DataTemplateSelector 进行了子类化 它可以工作 但是当
  • 160 位 SHA1 哈希值的前 32 位是否可以替代 CRC32 哈希值?

    我正在开发一个 NET 3 5 项目 我需要一个 32 位哈希值 NET 加密类中似乎没有任何方法返回 32 位哈希 MD5 是 128 位 SHA1 是 160 位等 我实现了一个 CRC32 类 但我发现现有的 SHA1 和 MD5 哈
  • .NET PInvoke 可以从用户指定的目录动态加载本机 dll 吗?

    我有一个 NET 应用程序 需要加载一个本机库 其位置由用户指定 PInvoke 看起来只会从全局搜索路径 或编译时指定的路径 加载 最好的方法是创建一个在运行时调用 LoadLibrary 的 C CLI 程序集吗 C CLI 会比 C
  • WCF获取证书编码值

    我在 WCF 服务中使用证书 因此在 web Config 中有一个编码值
  • 更改 WPF 应用程序清单?

    我已经发布给微软的评论 http connect microsoft com VisualStudio feedback ViewFeedback aspx FeedbackID 420920WPF 中的对话框未启用 VisualStyle
  • WPF PRISM 事件订阅不会消亡

    我有一个 PRISM RegionManager 其中有几个区域 顶部的功能区区域和其下方用于我的视图的主要内容区域 相当基本 该应用程序以主要内容区域中的 主页 视图开始 当我单击功能区上的按钮时 我将第二个视图注入内容区域并在区域管理器
  • WPF 从主线程以外的其他线程截屏

    我有一个线程用于侦听 WPF 应用程序的命令 如果 WPF 应用程序收到截取屏幕截图的命令 则任务将移交给 screenshotService 我在互联网上的某个地方找到了一些代码来截取屏幕截图 似乎可以工作 但我还没有想清楚 我无法从另一
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里

随机推荐

  • 在 JAR 中包含 JAR 的类路径

    是否可以指定一个Javaclasspath包括另一个 JAR 文件中包含的 JAR 文件 如果您尝试创建一个包含您的应用程序及其所需库的单个 jar 有两种方法 据我所知 可以做到这一点 第一个是One Jar 它使用特殊的类加载器来允许嵌
  • 从 REPL 评估 Scala 中的字符串命令

    有没有办法评估 Scala 中的任意字符串 就好像直接将相同的文本输入到 Scala REPL 中一样 我的意思是 我想做这样的事情 scala gt eval val x 42 scala gt x res2 Int 42 由于 Scal
  • 在 MySQL 中选择列表的子集

    我是一个初学者 我有两个表 产品 和 产品属性 这是一些想象的数据 实际的东西涉及更多的表 产品表 product id product name 10 aaa 11 bbb 12 ccc 产品属性表 attribute id produc
  • 以 UTF8 保存时,如何防止带有设置内容的额外换行符,同时保留现有换行符?

    我有一个小的 powershell 脚本 它读取 UTF8 编码的文档 在其中进行一些替换并将其保存回来 如下所示 Get Content path Replace myregex replacement Set Content path2
  • 我如何知道 ScalaQuery 中是否存在数据库表

    我正在尝试 ScalaQuery 它真的很棒 我可以使用 Scala 类定义数据库表 并轻松查询它 但我想知道 在下面的代码中 如何检查表是否存在 这样我就不会调用 Table ddl create 两次并在运行该程序两次时出现异常 obj
  • 将日期拆分为年、月、日的不同列

    我的动物园对象看起来像 头 观测点 Index pp 1932 01 01 0 1932 01 02 0 2 1932 01 03 0 我想将索引分为 3 列 年 月和日在单独的列中 这样我就可以使用以下方法每天进行一些分析ddply 我不
  • iOS 6 safari,setInterval 不会被解雇

    看来如果我滚动window the window setInterval在滚动发生时或之后不会附加 触发 还有其他人看到同样的问题吗 我是说 可能是什么原因造成的 我可以做什么来解决这个问题 iOS 会停止几乎所有对用户触摸的响应 以保证其
  • Sublime Text 2 中的正则表达式搜索替换

    我正在寻找在 Sublime Text 2 中用正则表达式进行搜索替换 有关于此的文档比较贫血 具体来说 我想对组进行替换 例如转换此文本 Hello my name is bob 这个搜索词 找什么 my name is w 用 来代替
  • WebConfigurationManager 和 ConfigurationManager 有什么区别?

    两者有什么区别WebConfigurationManager和ConfigurationManager 我什么时候应该使用其中一种而不是另一种 UPDATED 我刚刚看了WebConfigurationManager 并且由于某种原因 您无
  • Docker 和保护密码

    我最近一直在尝试使用 Docker 来构建一些可供使用的服务 但一直困扰我的一件事就是将密码放入 Dockerfile 中 我是一名开发人员 因此将密码存储在源代码中感觉就像是一拳打在脸上 这应该成为一个问题吗 关于如何在 Dockerfi
  • 随机化列表

    在 C 中随机化通用列表顺序的最佳方法是什么 我在一个列表中有一组有限的 75 个数字 我想为其分配随机顺序 以便为彩票类型应用程序抽取它们 随机播放任意内容 I List以及基于的扩展方法费舍尔 耶茨洗牌 private static R
  • 如何从 WatchKit 应用程序打开 iPhone 上的父应用程序?

    我正在尝试打开 Apple Watch 应用程序的父应用程序 在 Xcode Beta 2 中我们可以使用以下代码 WKInterFaceController openParentApplication 然而 在 Xcode beta 3
  • 有没有比 table() 更有效的替代方法?

    我使用以下命令 table factor list levels 1 n 与 列表 示例 a c 1 3 4 4 3 and levels 1 5 同时考虑 2 和 5 对于非常大的数据集 我的代码似乎非常无效 有谁知道隐藏库或代码片段可以
  • 删除 Mongoose 中的多对多引用

    我的猫鼬模式之一是多对多关系 var UserSchema new Schema name String groups type mongoose Schema ObjectId ref Group var GroupSchema new
  • 如何创建 String 类副本?

    我需要创建一个具有与以下完全相同的方法的类java lang String 在 Java 中执行此操作的最佳方法是什么 我知道我不能按原样扩展 String 类final 我不是在寻找需要复制源代码的解决方案java lang String
  • .pro 文件 Qt Creator 的评论

    有没有办法评论我的某些部分 pro文件 Qt 项目 就我而言 我想评论不适用于我当前目标平台的特定部分 现在发现这个 http doc qt io qt 4 8 qmake project files html 您可以使用 symbol I
  • setw() 不影响读取整数字段

    我写了这样的代码 int d 0 cin gt gt setw 2 gt gt d 但似乎setw 对读取整数没有影响 如果是这样 我们如何实现以下行为 2d of scanf with istream setw is not design
  • 如何将 CLion 自定义 CMake 可执行文件设置为随 Homebrew 安装的版本?

    我试图让 CLion 使用与我从命令行使用的相同版本的 CMake 在 首选项 gt 构建 执行 部署 gt 工具链 中 我尝试将自定义 CMake 可执行路径设置为 usr local Cellar cmake 3 7 0 bin 但 C
  • 如何在 .NET 中处理 Negotiate?

    我正在尝试在小型 Web 服务器中实现 Negotiate 至少是 Kerberos 部分 我已经弄清楚如何让客户端向我发送 Kerberos 协商授权标头 我已经弄清楚如何解码该数据 ASN 1 我不知道如何把它变成WindowsIden
  • 我的 WPF 导航中是否存在内存泄漏?

    我正在检查 WPF 应用程序以查找内存泄漏 使用 ANTS Memory Profiler 5 1 并且我不断看到一些页面和控件在不应该占用的情况下占用了内存 因此 我转到对象保留图 看看是什么让它们保留在周围 我在每个页面上都看到了这一点