【问题标题】:How do I avoid 'Binding to Large CLR Objects'?如何避免“绑定到大型 CLR 对象”?
【发布时间】:2010-10-19 12:07:09
【问题描述】:

This guide 关于优化 DataBinding 说:

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

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

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

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

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

【问题讨论】:

    标签: c# winforms data-binding


    【解决方案1】:

    此建议随后转换为“避免大量字段出现问题,使用更少字段并创建更多行”

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

    无论如何,如果你确实有一个暴露成百上千个属性的类,你就会遇到比绑定性能更严重的问题......这是一个严重的设计缺陷,你应该在之后修复阅读some OO principles

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

    嗯,你提到的页面是关于 WPF 的,但我认为绑定到较小对象的想法也适用于 WinForms(因为需要观察的属性越多,它就会越慢)

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

    您部分正确...它实际上使用TypeDescriptor,而后者又使用反射来检查常规 CLR 对象。但是这种机制比反射灵活得多:一个类型可以实现ICustomTypeDescriptor来提供自己的描述、成员列表等(DataTable就是这种类型的一个例子)

    【讨论】:

    • 这个类可能暴露了 50 个 - 但它是专门为数据绑定而存在的,实际上是由一系列共享语义链接的其他类组成的
    【解决方案2】:

    您正在解决错误的问题。当有 5 百万 个字段可供搜索时,典型用户需要超过 才能找到她正在寻找的内容。 UI 的速度变得无关紧要。只有机器才能更好地找回数据。

    你有一个。通过让用户输入搜索词来帮助用户缩小搜索范围,以便总查询结果不包含超过一百行。 dbase 引擎可帮助您快速实现这一目标。它会自动解决您的网格性能问题。

    【讨论】:

    • 我不确定我在哪里给人的印象是我使用 DataGridView 来允许用户搜索某些东西 - 我不是。我用它来显示一大堆信息。用户目前正在查看一个包含 10 万行和 50 个字段的大型 Excel 电子表格。我想在我的应用程序中显示相同的信息,并增加一定的价值(能够将每个对象/行链接回我的应用程序的其他元素)
    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多