WPF - 动态与静态资源

时间:2009-05-10 02:07:49

标签: wpf performance memory resources

我在WPF项目中遇到了巨大的内存泄漏,并试图弄清楚我可以做些什么来最小化它。要访问资源,我100%使用StaticResource。我应该尽可能使用DynamicResource吗?就StaticResource和DynamicResource之间的内存管理有优势吗?

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

2 个答案:

答案 0 :(得分:3)

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

  • StaticResource意味着“查找 资源一次,然后继续使用 相同的价值。“

  • DynamicResource意味着“查找 资源每次需要时,在 值已更改。“

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

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

答案 1 :(得分:0)

据我所知,客户端的操作系统非常重要。

WPF旨在用于Vista及更高版本的系统(Windows 7)。您可能会遇到xp用户的性能问题。