如何避免“绑定到大型CLR对象”?

时间:2010-10-19 12:07:09

标签: c# winforms data-binding

关于优化DataBinding的

This guide说:

  

当您将数据绑定到具有数千个属性的单个CLR对象时,会对性能产生重大影响。您可以通过将单个对象划分为具有较少属性的多个CLR对象来最小化此影响。

  1. 这是什么意思?我仍然试图熟悉DataBinding,但我的类比是属性就像SQL表字段,对象是行。然后,这个建议转换为“避免大量字段出现问题,使用更少的字段并创建更多行”。因为这对我没有任何意义,可能我对数据绑定的理解完全是歪斜的吗?

  2. 这个建议真的适用吗?我不确定它是否特定于.NET 4 / WPF,而我使用的是3.5和基于WinForms的自定义控件库(DevExpress)

  3. 顺便说一下:在使用IList样式数据源时,我认为DataBinding使用反射是否正确?

  4. 这不仅仅是一个学术问题。我目前正在尝试加速XtraGridView(DevExpress控件)加载大约100,000个具有50个属性的对象。

2 个答案:

答案 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引擎可以帮助您快速完成。它会自动解决您的网格性问题。