代码之家  ›  专栏  ›  技术社区  ›  fostandy

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

  •  3
  • fostandy  · 技术社区  · 14 年前

    This guide 优化数据绑定时说:

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

    1. 这是什么意思?我仍在尝试熟悉数据绑定,但这里的类比是,属性类似于SQL表字段,对象是行。然后,该建议翻译为“为了避免大量字段出现问题,使用较少的字段并创建更多的行”。因为这对我没有任何意义,可能我对数据绑定的理解是完全歪斜的?

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

    3. 顺便提一句:当使用IList样式的数据源时,我是否正确地认为数据绑定使用反射?

    这不仅仅是一个学术问题。我目前正在尝试加速加载XtragridView(DevExpress控件),其中包含大约100000个对象,大约50个属性。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Thomas Levesque    14 年前

    然后,该建议转换为“为了避免大量字段出现问题,使用较少的字段并创建更多的行”。

    我认为它应该转化为“使用更少的字段并创建更小的 桌子 “(即字段较少)。最初的建议应该是“[…]将单个类划分为多个类”,属性更少。正如您正确指出的,创建更多的“行”是没有意义的…

    不管怎样,如果你 有一个类可以公开成百上千个属性,您的问题比绑定性能要严重得多…这是一个严重的设计缺陷,你应该在阅读后修复 some OO principles .

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

    好吧,您提到的页面是关于wpf的,但是我认为绑定到较小对象的想法也可以应用于winforms(因为需要监视的属性越多,速度就越慢)

    顺便提一句:当使用IList样式的数据源时,我是否正确地认为数据绑定使用反射?

    你部分正确…它实际使用 TypeDescriptor ,然后使用反射来检查常规的clr对象。但是这种机制比反射更灵活:类型可以实现 ICustomTypeDescriptor 提供自己的描述、成员列表等(DataTable是此类类型的一个示例)

        2
  •  2
  •   Hans Passant    14 年前

    你在解决错误的问题。它需要一个典型的用户 找到她5岁时要找的东西 百万 要搜索的字段。用户界面的速度变得无关紧要。只有机器才能更好地找到数据。

    你有一个。帮助用户缩小搜索范围,让她输入搜索词,这样总的查询结果就不会超过100行。DBase引擎帮助您实现这一目标。它可以自动解决网格性能问题。

    推荐文章