创建由数据库驱动的对象以填充Treeview-非常慢
时间:2020-03-05 18:51:21 来源:igfitidea点击:
我有一个从数据库读取表的应用程序。
我根据从结果中收集的唯一字符串值发出SQL查询以获取结果集,我使用case / switch语句生成某些对象(它们继承TreeNode BTW)。这些创建的对象被分流到Dictionary对象中,以备后用。
在生成这些对象的同时,我使用结果集中的某些值来通过设置器填充对象中的值。
我查询字典以返回特定的对象类型,并使用它来填充树视图。但是,不可能从Dictionary对象中在树视图中填充2个相同类型的对象(我们会遇到一个运行时错误,此错误现在使我逃脱了,这涉及到引用同一对象)。因此,我要做的是使用memberwiseClone并实现IClonable来解决此问题。
我这样做对吗?有没有更好的方法,因为我认为这导致我的程序在这一点上确实很慢。至少我认为来自比我了解更多的人的任何建议都有点笨拙。
解决方案
回答
我们使用外部词典是否有原因?我将在查询数据时直接填充树。
如果确实需要字典,则可以将树节点的.Tag属性设置为指向字典中的数据。
回答
要添加到@Brad,仅根据需要填充树。这意味着挂接到树节点的expand事件。这类似于Windows Explorer在处理网络共享时的功能。
树中每个实际的树节点应有1个" TreeNode"对象,请勿尝试重用。我们可以使用Tag属性将它们与数据关联(这是推荐方法),也可以将TreeNode本身子类化(这是Java方法,但在.NET中使用较少)。
(使用克隆方法通常提示我们(a)做错了事,或者(b)需要将域模型分解为可变对象和不可变对象。)
回答
我们是否考虑过使用仅加载用户实际想要查看的节点的虚拟树视图,所以我对www.infralution.com的组件取得了很好的成功