当您将数据绑定到具有数千个属性的单个CLR对象时,会对性能产生重大影响。您可以通过将单个对象划分为具有较少属性的多个CLR对象来最小化此影响。
这是什么意思?我仍然试图熟悉DataBinding,但我的类比是属性就像SQL表字段,对象是行。然后,这个建议转换为“避免大量字段出现问题,使用更少的字段并创建更多行”。因为这对我没有任何意义,可能我对数据绑定的理解完全是歪斜的吗?
这个建议真的适用吗?我不确定它是否特定于.NET 4 / WPF,而我使用的是3.5和基于WinForms的自定义控件库(DevExpress)
顺便说一下:在使用IList样式数据源时,我认为DataBinding使用反射是否正确?
这不仅仅是一个学术问题。我目前正在尝试加速XtraGridView(DevExpress控件)加载大约100,000个具有50个属性的对象。
答案 0 :(得分:2)
然后,这个建议转换为“避免大量字段出现问题,使用更少的字段并创建更多行”
我认为它应该转换为“使用更少的字段并创建更小的表”(即使用更少的字段)。最初的建议应该是“[...]将单个类划分为多个类”,具有更少的属性。正如您所正确指出的那样,创建更多“行”是没有意义的......
无论如何,如果你做有一个暴露成百上千个属性的类,那么你遇到的问题要比绑定性能严重得多......这是一个严重的设计缺陷,你应该修复它阅读some OO principles。
这个建议真的适用吗?我不确定它是否特定于.NET 4 / WPF,而我使用的是3.5和基于WinForms的自定义控件库(DevExpress)
嗯,你提到的页面是关于WPF的,但我认为绑定到较小对象的想法也适用于WinForms(因为需要监视的属性越多,它就越慢)
顺便说一下:在使用IList样式数据源时,我认为DataBinding使用反射是否正确?
你是部分正确的...它实际上使用TypeDescriptor
,它反过来使用反射来检查常规的CLR对象。但是这种机制比反射更灵活:类型可以实现ICustomTypeDescriptor
来提供自己的描述,成员列表等(DataTable就是这种类型的一个例子)
答案 1 :(得分:2)
你正在解决错误的问题。一个典型的用户需要超过周,以便在她有5 百万个字段进行搜索时找回她正在寻找的内容。 UI的速度变得无关紧要。只有一台机器才能更好地找回数据。
你有一个。通过让用户输入搜索条件,帮助用户缩小搜索范围,使总查询结果不超过百行。 dbase引擎可以帮助您快速完成。它会自动解决您的网格性问题。