加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi TreeView DestroyWnd / CreateWnd很慢

发布时间:2020-12-15 09:08:42 所属栏目:大数据 来源:网络整理
导读:我们有一个TTreeView,它有许多节点 – 通常有20,000个节点甚至更多.此TTreeView用于停靠接口(DevExpress Docking Library).当应用程序中的任何表单停靠或取消停靠时,可停靠表单的句柄将被更改.这反过来会导致调用所有表单和控件的DestroyWnd和CreateWnd过程.
我们有一个TTreeView,它有许多节点 – 通常有20,000个节点甚至更多.此TTreeView用于停靠接口(DevExpress Docking Library).当应用程序中的任何表单停靠或取消停靠时,可停靠表单的句柄将被更改.这反过来会导致调用所有表单和控件的DestroyWnd和CreateWnd过程.

对于TTreeView,DestroyWnd将节点保存到流中,CreateWnd重新加载它们.在我们的具有非常大的树视图的应用程序中,这导致节点在流出和返回时的长延迟.

我的问题:如何防止这种延迟?我听说很多人高度评价Virtual TreeView,我认为这不是TTreeView的后代,是否避免了这个问题?我们尝试过Developer Express TcxTreeView,但它来自TTreeview,所以它遇到了同样的问题.

解决方法

20,000个节点太多,无法放入标准的TTreeView.使用TVirtualTreeView绝对是显示大量节点的方法.主要优点是您的节点数据不存储在TreeView本身中.它仅用于显示和用户交互.您将数据存储在内存中的其他位置,以便它不受窗口重新创建的影响,然后TVirtualTreeView会询问您在任何给定时间只需要的数据.重新创建TVirtualTreeView窗口只需要用当前数据重新绘制窗口显示.

与标准的TTreeView不同,后者将数据存储在TreeView本身中.这就是为什么每次重新创建窗口时,TTreeView.DestroyWnd()和TTreeView.CreateWnd()都必须保存和恢复所有节点数据的副本.节点越多,管理该数据的开销就越大.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读