我在 WPF 项目中遇到了巨大的内存泄漏,并且正在尝试找出可以采取哪些措施来最大程度地减少它。为了访问资源,我 100% 的时间都使用 StaticResource。我应该尽可能使用 DynamicResource 吗? StaticResource 和 DynamicResource 之间的内存管理有何优势?
仅供参考:我有一个通过 DataTemplate 显示数据的列表框。当用户向上/向下滚动时,内存会快速增加,只需几分钟的向上/向下滚动即可达到 1GB。
这不太可能是 StaticResource / DynamicResource 的事情。静态和动态指的是查找策略,而不是保留策略:
因此,您所做的事情听起来是正确的:将 StaticResource 用于不变的资源,例如 DataTemplates(并为可能更改的资源保留 DynamicResource,例如如果用户更改系统配色方案,系统画笔可能会更改)。通过 StaticResource 引用分配 DataTemplate 不会比通过 DynamicResource 引用分配更多内存,而且从长远来看会更便宜,因为 WPF 不必不断返回并重新评估引用。
更有可能的是,您的模板本身正在执行某些操作,当应用模板(在数据项上实例化)时,会以泄漏的方式分配内存(或间接导致内存分配)。我见过的一个违反直觉的原因是模板是否使用旧式位图效果。另一个问题是模板是否调用连接事件处理程序的代码隐藏。但这些都不会受到引用模板资源的方式的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)