【问题标题】:Delphi TreeView DestroyWnd/CreateWnd slowDelphi TreeView DestroyWnd/CreateWnd 慢
【发布时间】:2012-04-19 00:27:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: delphi treeview vcl virtualtreeview


    【解决方案1】:

    20,000 个节点太多了,无法放入标准 TTreeView。使用TVirtualTreeView 绝对是显示大量节点的方法。主要优点是您的节点数据不存储在 TreeView 本身中。它仅用于显示和用户交互。您将数据存储在内存中的其他位置,这样它就不会受到窗口娱乐的影响,然后TVirtualTreeView 会随时要求您提供它立即需要的数据。重新创建TVirtualTreeView 窗口只需使用当前数据重新绘制窗口显示即可。

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

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 2012-09-03
      • 2010-10-09
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多