创建由数据库驱动的对象来填充树视图 - 非常慢

发布于 2024-07-04 06:35:33 字数 447 浏览 10 评论 0原文

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

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

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

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

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

I have an application that reads a table from a database.

I issue an SQL query to get a result set, based on a unique string value I glean from the results, I use a case/switch statement to generate certain objects (they inherit TreeNode BTW). These created objects get shunted into a Dictionary object to be used later.

Whilst generating these objects I use some of the values from the result set to populate values in the object via the setters.

I query the Dictionary to return a particular object type and use it to populate a treeview. However it is not possible to populate 2 objects of the same type in a treeview from the Dictionary object (you get a runtime error - which escapes me at the moment, something to with referencing the same object). So what I have to do is use a memberwiseClone and implement IClonable to get around this.

Am I doing this right? Is there a better way - because I think this is causing my program to be real slow at this point. At the very least I think its a bit clunky - any advice from people who know more than me - greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

伏妖词 2024-07-11 06:35:33

您使用外部词典有什么原因吗? 我会在查询数据时直接填充树。

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

Is there a reason you are using the external dictionary? I would populate the tree directly as the data is queried.

If you do require the dictionary, you could set the .Tag property of the tree node to point to the data in your dictionary.

停顿的约定 2024-07-11 06:35:33

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

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

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

To add to @Brad, only populate the tree as needed. That means hooking into the expand event of the tree nodes. This is similar to how Windows Explorer functions when dealing with network shares.

There should be 1 TreeNode object per actual tree node in the tree - don't try to reuse the things. You may either associate them with your data using the Tag property (this is the recommended method), or you can subclass the TreeNode itself (this is the Java method, but used less in .NET).

(The use of cloning methods is usually a hint that you're either (a) doing something wrong, or (b) need to factor your domain model to separate mutable objects from immutable.)

忆依然 2024-07-11 06:35:33

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

have you considered using a Virtual Tree view which only loads the nodes the user actually wants to look at - i've had good success with the component from www.infralution.com

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文