当前位置 : 主页 > 编程语言 > delphi >

Delphi TreeView DestroyWnd / CreateWnd很慢

来源:互联网 收集:自由互联 发布时间:2021-06-23
我们有一个TTreeView,它有许多节点 – 通常有20,000个节点甚至更多.此TTreeView用于停靠接口(DevExpress Docking Library).当应用程序中的任何表单停靠或取消停靠时,可停靠表单的句柄将被更改.这
我们有一个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()都必须保存和恢复所有节点数据的副本.节点越多,管理该数据的开销就越大.

网友评论