gpt4 book ai didi

Delphi TreeView DestroyWnd/CreateWnd 慢

转载 作者:行者123 更新时间:2023-12-03 15:40:03 25 4
gpt4 key购买 nike

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

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

我的问题:如何防止这种延迟?我听很多人评价Virtual TreeView我相信它不是从 TTreeView 继承的,它是否可以避免这个问题?我们尝试过 Developer Express TcxTreeView,但它是 TTreeview 的后代,因此也遇到了同样的问题。

最佳答案

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

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

关于Delphi TreeView DestroyWnd/CreateWnd 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com