【发布时间】:2011-08-11 15:45:52
【问题描述】:
假设我有 10000 个样式非常重的 WPF 控件,并且它们的样式大约 90% 相同。
我想知道:在性能方面,最好的方法是什么?
- 拥有 10000 种独特的风格
- 有 1 个样式包含常见的 90% + 10000 个样式继承此样式并添加剩余的 10%
我没有再三考虑就选择了第二个选项(出于可读性考虑),但我进行了一些基本测试,结果表明这在性能方面是一个非常糟糕的主意。那么我的测试有问题吗,还是样式继承真的会降低性能?
编辑:好的,我几乎可以肯定这没有得到足够好的解释。我会尽量详细一点:
基本上,我关心的是DataGrid。 我的单元格是高度可定制的(基本上,您可以更改单元格中的每个样式属性),并且由于 datagrid 不允许轻松完成此操作(感谢 datagridcell 的 datacontext 是 rowView 而不是 CellView),所以我做了一些事情实现我要添加的功能真的很难看(如果您想了解详细信息,请参阅there)。它基本上包括在每个单元格的代码隐藏中设置 CellStyle。
由于这些样式有很多共同点,我尝试设置一个通用样式,放入我的应用程序的静态资源,并将我的所有单元格样式都基于这个通用样式。 (除其他外,此样式托管事件侦听器,而 cellStyles 将绑定添加到诸如前景颜色、FontSize 等属性...)
当我尝试这样做时,我注意到数据网格的性能大幅下降。 现在,由于当时我并没有真正测试应用程序的这一面,可能只是代码的某些部分写得不好,性能下降与我使用“基于”样式无关。无论如何,我回滚并完成了我正在进行的测试。
现在,我正在整理我的代码,我再次考虑这个问题。 在麻烦再次更改我所有的样式结构之前,如果只是为了测试目的,我想我会先在这里问一下是否值得麻烦......没有更多的事情......
感谢您的帮助!
【问题讨论】:
-
它们是作为 StaticResource 还是 DynamicResource 访问的?
-
你做了什么样的测试?可以发一下代码吗?
-
我认为这取决于您如何加载资源。你在使用 ResourceDictionary 对象吗?
-
只是出于好奇,这背后的背景是什么?如果这 10% 的差异与数据相关,你不能只用触发器或其他东西来做差异吗?
-
感谢您对我的问题感兴趣(我很惊讶它得到了这么多),请参阅我的编辑了解更多详情
标签: wpf performance styles