创建由数据库驱动的对象来填充树视图 - 非常慢
-
09-06-2019 - |
题
我有一个从数据库读取表的应用程序。
我发出 SQL 查询来获取结果集,基于从结果中收集的唯一字符串值,我使用 case/switch 语句生成某些对象(它们继承 TreeNode BTW)。这些创建的对象被分流到一个 Dictionary 对象中以供稍后使用。
在生成这些对象时,我使用结果集中的一些值通过设置器填充对象中的值。
我查询字典以返回特定的对象类型并使用它来填充树视图。但是,不可能从 Dictionary 对象填充树视图中的 2 个相同类型的对象(您会收到运行时错误 - 目前我没有注意到,与引用同一对象有关)。所以我要做的就是使用 memberwiseClone 并实现 IClonable 来解决这个问题。
我这样做对吗?有没有更好的方法 - 因为我认为这导致我的程序此时非常慢。至少我认为它有点笨拙 - 来自比我了解更多的人的任何建议 - 非常感谢。
解决方案
添加到@布拉德, ,仅根据需要填充树。这意味着挂钩树节点的展开事件。这类似于 Windows 资源管理器处理网络共享时的功能。
应该有 1 TreeNode
树中每个实际树节点的对象 - 不要尝试重用这些东西。您可以使用 Tag 属性将它们与您的数据关联起来(这是推荐的方法),或者您可以将 TreeNode
本身(这是 Java 方法,但在 .NET 中使用较少)。
(克隆方法的使用通常暗示您(a)做错了什么,或者(b)需要考虑您的域模型以将可变对象与不可变对象分开。)
其他提示
您使用外部词典有什么原因吗?我会在查询数据时直接填充树。
如果您确实需要字典,则可以设置树节点的 .Tag 属性以指向字典中的数据。
您是否考虑过使用虚拟树视图,该视图仅加载用户实际想要查看的节点 - 我在 www.infralution.com 的组件上取得了良好的成功