【问题标题】:Creating objects driven by the database to populate a Treeview - very slow创建由数据库驱动的对象以填充 Treeview - 非常慢
【发布时间】:2010-09-08 13:05:50
【问题描述】:

我有一个从数据库中读取表的应用程序。

我发出一个 SQL 查询来获取结果集,基于从结果中收集到的唯一字符串值,我使用 case/switch 语句生成某些对象(它们继承 TreeNode BTW)。这些创建的对象被分流到 Dictionary 对象中以供以后使用。

在生成这些对象时,我使用结果集中的一些值通过 setter 填充对象中的值。

我查询 Dictionary 以返回特定对象类型并使用它来填充树视图。但是,不可能从 Dictionary 对象的树视图中填充 2 个相同类型的对象(您会收到运行时错误 - 这让我现在无法理解,这与引用同一对象有关)。所以我要做的是使用 memberwiseClone 并实现 IClonable 来解决这个问题。

我这样做对吗?有没有更好的方法 - 因为我认为这导致我的程序在这一点上真的很慢。至少我认为它有点笨拙 - 任何比我了解更多的人的建议 - 非常感谢。

【问题讨论】:

    标签: c# dictionary object clone icloneable


    【解决方案1】:

    您是否考虑过使用仅加载用户实际想要查看的节点的虚拟树视图 - 我在 www.infralution.com 的组件上取得了很好的成功

    【讨论】:

      【解决方案2】:

      要添加到@Brad,只需根据需要填充树。这意味着挂钩到树节点的展开事件。这类似于 Windows 资源管理器在处理网络共享时的功能。

      树中每个实际的树节点应该有 1 个 TreeNode 对象 - 不要试图重用这些东西。您可以使用 Tag 属性将它们与您的数据相关联(这是推荐的方法),或者您可以将 TreeNode 本身子类化(这是 Java 方法,但在 .NET 中使用较少)。

      (克隆方法的使用通常暗示您(a)做错了什么,或者(b)需要分解您的域模型以将可变对象与不可变对象分开。)

      【讨论】:

        【解决方案3】:

        您使用外部字典是否有原因?我会在查询数据时直接填充树。

        如果确实需要字典,可以将树节点的 .Tag 属性设置为指向字典中的数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-26
          • 1970-01-01
          • 1970-01-01
          • 2017-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多