我听过几次资源词典可以缓慢但肯定地积累并且会拖累应用程序的性能(特别是当合并的词典开始引用其他合并的词典时,它们会聚集成一个无意识的资源矩阵)。
考虑到这一点,应该将样式同化为c#作为自定义控件,智能地尝试执行样式将设置给定控件的属性,由内部定义的Enum设置=“示例“而不是Style =”{StaticResource Example}“? 如果是这样,在ResourceDictionary的严重性'(缺少一个更好的词)的什么点/级别应该这样做?
此外,如果事实证明C#在运行时效率更高,那么XAML应该多注意C#? 是否应该将XAML简单地用作放置最终定义,样式,给定属性并由C#控制的极简主义标签的区域?
答案 0 :(得分:2)
根据我的观点和经验,我认为资源是WPF引擎提供的一个非常好的工具。现在,问题是性能问题,为了回答这个问题我会指出两个巨大的工具Visual Studio和Blend都是在WPF中构建的,UI元素正在大量使用动态资源。但是,该工具没有性能问题。因此,要正确回答您的问题,您应该在正确的位置使用正确的技术。当您想要修改主题或视觉外观等内容时,资源为您提供了极大的灵活性。尽管如此,您需要非常小心使用并尽量控制资源。仅包含页面中所需的资源。
所以,结论: 1.不,不要将所有东西都转化为控制而根本不使用资源。 2.是的,您需要在资源方面做出一些考虑的努力,以保持应用程序性能的优化。
答案 1 :(得分:1)
如果由于通过传递依赖性重复添加相同的资源而引用内存膨胀,请查看在Web上浮动的SharedResourceDictionary
的各种实现。这可以减少工作集并减少启动时间(根据我的经验)但是你应该注意避免内存泄漏,因为大多数只是将URI字符串中的静态映射存储到ResourceDictionary
。
如果您对资源词典是否有用提出了一个更一般的问题,那么是的,它们非常有用,甚至对于许多常见的XAML模式(例如StaticResource
)都是必不可少的。