gpt4 book ai didi

WPF - 动态与静态资源

转载 作者:行者123 更新时间:2023-12-02 00:45:26 24 4
gpt4 key购买 nike

我在我的 WPF 项目中遇到了巨大的内存泄漏,并试图找出我可以做些什么来最小化它。为了访问资源,我 100% 的时间都使用 StaticResource。我应该尽可能使用 DynamicResource 吗?就静态资源和动态资源之间的内存管理而言,是否有优势?

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

最佳答案

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

  • StaticResource 的意思是“查找
    资源一次,然后继续使用
    相同的值。”
  • DynamicResource 的意思是“查找
    每次需要的资源,在
    如果值已更改。”

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

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

    关于WPF - 动态与静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844531/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com