WPF - 动态资源与静态资源

2023-12-12

我在 WPF 项目中遇到了巨大的内存泄漏,并且正在尝试找出可以采取哪些措施来最大程度地减少它。为了访问资源,我 100% 的时间都使用 StaticResource。我应该尽可能使用 DynamicResource 吗? StaticResource 和 DynamicResource 之间的内存管理有何优势?

仅供参考:我有一个通过 DataTemplate 显示数据的列表框。当用户向上/向下滚动时,内存会快速增加,只需几分钟的向上/向下滚动即可达到 1GB。


这不太可能是 StaticResource / DynamicResource 的事情。静态和动态指的是查找策略,而不是保留策略:

  • StaticResource 的意思是“查找 资源一次,然后继续使用 相同的值。”

  • DynamicResource 的意思是“查找 每次需要资源时, 如果值发生变化。”

因此,您所做的事情听起来是正确的:将 StaticResource 用于不变的资源,例如 DataTemplates(并为可能更改的资源保留 DynamicResource,例如如果用户更改系统配色方案,系统画笔可能会更改)。通过 StaticResource 引用分配 DataTemplate 不会比通过 DynamicResource 引用分配更多内存,而且从长远来看会更便宜,因为 WPF 不必不断返回并重新评估引用。

更有可能的是,您的模板本身正在执行某些操作,当应用模板(在数据项上实例化)时,会以泄漏的方式分配内存(或间接导致内存分配)。我见过的一个违反直觉的原因是模板是否使用旧式位图效果。另一个问题是模板是否调用连接事件处理程序的代码隐藏。但这些都不会受到引用模板资源的方式的影响。

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

WPF - 动态资源与静态资源 的相关文章

随机推荐

  • 如何在两个div之间画一条线?

    我目前正在尝试在一个 div 的右下角到另一个 div 的右上角之间绘制一条对角线 如果可能的话 我想不用 jQuery 来完成它 这可能吗 http jsfiddle net cnmsc1tm 由于 CSS 限制 这不适用于 IE8 或更
  • 删除 jQuery Mobile 滑块控件中的文本框

    我正在使用这个 JQM 链接 我在分区中使用了滑块 在旧版本中我使用了属性 class ui hidden accessible 因为没有在滑块旁边显示文本框 但在此
  • 调试 Arm neon 代码中的数据/neon 性能危害

    最初 当我尝试时出现了问题优化算法根据 Profiler 的数据 Neon Arm 和其中的一小部分占据了 80 我尝试测试看看可以采取哪些措施来改进它 为此我创建了指向优化函数的不同版本的函数指针数组 然后在循环中运行它们以在探查器中查看
  • 如何使用个人 Microsoft 帐户通过 Azure AD 多租户应用程序访问 AzureRM?

    我的目标很简单 使用 Azure AD 多租户应用程序能够调用其他租户上的 Azure 资源管理器 API 但是 当您使用个人 Microsoft 帐户登录时 我不知道如何执行此操作 I created an Azure AD multi
  • 如何在 Django 中设置 PostgreSQL 数据库

    我是 Python 和 Django 新手 我正在使用 PostgreSQL 数据库引擎后端配置 Django 项目 但每个数据库操作都会出现错误 例如当我跑步时manage py syncdb 我越来越 C xampp htdocs dj
  • 为什么使用 register_shutdown_function() 时我的“关闭回调”无效?

    警告 register shutdown function 无效的关闭回调 trait ErrorTrait public function shutDownFunction error error get last fatal error
  • 将数组与条件合并

    我想合并具有特定条件的两个数组并更新它们包含的对象 首先是我的数组中的结构 struct Item var id Int var name String var value Int 两个数组的第二个元素 let fisrt Item id
  • 在 Web 服务器(flask、apache 和 wsgi)上写入文件时出现权限问题

    我正在尝试部署我的第一个网络应用程序 但我对此一无所知 这很有趣 但当我尝试解决问题时 我觉得我不知道自己在做什么 我在 digital ocean 上创建了一个在 ubuntu 18 04 上运行的服务器 在过去的 2 天里我一直在与它斗
  • 如何将 24 位整数转换为 3 字节数组?

    嘿 我完全超出了我的能力范围 我的大脑开始受伤 我需要转换一个整数 以便它适合 3 字节数组 这是一个 24 位 int 吗 然后再次返回以通过套接字从字节流发送 接收该数字 I have NSMutableData data NSMuta
  • 过滤器中的 Countif 1 和 -1

    我正在尝试计算过滤数据中的 1 和 1 1 的计数是正确的 但对于 1 它也包含 1 并且显示的计数不正确 如果你看一下所附的图片 1 的计数应该是 1 而不是显示 3 这意味着它也在计数 1 欲了解更多信息 请参阅图片 公式 SUMPRO
  • 反转 LinkedList 中的对象的问题

    我正在为一个作业编写代码 该作业需要一个在给定要反转的列表部分的情况下反转 LinkedList 中的元素的方法 例如 如果用户输入 3 该方法将反转数组中的前 3 个元素 我已经为其编写了代码 但它没有反转代码 而是简单地将第二个元素替换
  • 1/C# 中的 BigInteger

    我要实现 BigInteger ModPow 1 BigInteger 2 5 but 1 BigInteger总是回来0 这导致结果是0也 我试着寻找一些BigDecimalc 的类 但我什么也没找到 即使没有 有什么方法可以计算这个吗
  • OneDrive API Node.js - 无法使用 :/createUploadSession 内容范围错误

    我的问题是我无法上传大于 4MB 的文件 因此我根据以下内容使用了 createuploadsession创建上传会话 我成功从 createuploadsession 响应中获取 uploadUrl 值 现在我尝试使用此代码发出 PUT
  • r - 在 ggplot 中用一个 x 轴绘制两个图(3 个变量)

    我试图在一张图中绘制两个流量和一个降雨数据 我将其分为顶部和底部部分 如下图所示 在这里 我对这个情节有两个问题 花了很长时间但无法解决 为什么观察到的流量总是黑色的 即使我将其设置为蓝色 我是否不小心使用了其他一些参数来覆盖它 最重要的是
  • 为什么 const 数组无法从 constexpr 函数访问?

    我有一个名为 access 的 constexpr 函数 我想访问数组中的一个元素 char const const foo foo char const const bar 10 bar constexpr int access char
  • 如何在不存储的情况下将 Metro 应用程序部署到 Windows RT 设备 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我开发了一个地铁应用程序 仅供我的公司使用 所以我不会将其上传到 Windows 应用商
  • YFinance -tickerData.info 不适用于某些股票

    import yfinance as yf define the ticker symbol tickerSymbol AFT NZ get data on this ticker tickerData yf Ticker tickerSy
  • 查找两个字符串列表之间的差异

    我很确定这是重复的 但我已经尝试了一切 但我似乎仍然无法理解其中的差异 我有两个字符串列表 listA 和 listB 我正在尝试查找 listA 中不在 B 中的项目 例子 列表A 1 2 4 7 列表B 2 4 我想要的输出是 1 7
  • c -lz 库链接顺序(对符号“inflateInit2_”的未定义引用)

    我按此顺序链接 CodeBlocks 中的库 lz L usr local lib L usr local include pthread lswscale lavutil lavcodec lmp3lame lopus ltiff lvo
  • WPF - 动态资源与静态资源

    我在 WPF 项目中遇到了巨大的内存泄漏 并且正在尝试找出可以采取哪些措施来最大程度地减少它 为了访问资源 我 100 的时间都使用 StaticResource 我应该尽可能使用 DynamicResource 吗 StaticResou