3

我们有一个TTreeView有很多节点的——通常有 20,000 个节点甚至更多。这TTreeView用于停靠界面(DevExpress 停靠库)。当应用程序中的任何表单停靠或取消停靠时,可停靠表单的句柄都会更改。这反过来导致调用所有表单DestroyWndCreateWnd控件的过程。

在 a 的情况下TTreeViewDestroyWnd将节点保存到流中并CreateWnd重新加载它们。在我们的具有非常大的树视图的应用程序中,这会导致在节点流出和返回时很长的延迟。

我的问题:如何防止这种延迟?我听过很多人高度评价我认为不是来自的Virtual TreeViewTTreeView,它是否避免了这个问题?我们已经尝试过 Developer Express TcxTreeView,但它源自 TTreeview,因此遇到了同样的问题。

4

1 回答 1

12

20,000 个节点对于一个标准来说太多了TTreeView。使用TVirtualTreeView绝对是显示大量节点的方法。主要优点是您的节点数据不存储在 TreeView 本身中。它仅用于显示和用户交互。您将数据存储在内存中的其他位置,使其不受窗口娱乐的影响,然后TVirtualTreeView在任何给定时间要求您提供它立即需要的数据片段。重新TVirtualTreeView创建窗口只是用当前数据重新绘制窗口显示的问题。

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

于 2012-04-19T01:35:06.090 回答