Delphi TreeView的DestroyWnd和CreateWnd操作为何如此耗时?
- 内容介绍
- 文章标签
- 相关推荐
本文共计394个文字,预计阅读时间需要2分钟。
我们有一个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,所以它遇到了同样的问题.
与标准的TTreeView不同,后者将数据存储在TreeView本身中.这就是为什么每次重新创建窗口时,TTreeView.DestroyWnd()和TTreeView.CreateWnd()都必须保存和恢复所有节点数据的副本.节点越多,管理该数据的开销就越大.
本文共计394个文字,预计阅读时间需要2分钟。
我们有一个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,所以它遇到了同样的问题.
与标准的TTreeView不同,后者将数据存储在TreeView本身中.这就是为什么每次重新创建窗口时,TTreeView.DestroyWnd()和TTreeView.CreateWnd()都必须保存和恢复所有节点数据的副本.节点越多,管理该数据的开销就越大.

