- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个 TTreeView
,它有许多节点 - 通常有 20,000 个节点甚至更多。此 TTreeView
用于停靠界面(DevExpress Docking Library)。当应用程序中的任何窗体停靠或取消停靠时,可停靠窗体的句柄都会更改。这反过来会导致调用所有窗体和控件的 DestroyWnd
和 CreateWnd
过程。
对于 TTreeView
,DestroyWnd
将节点保存到流中,然后 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/
我们有一个 TTreeView,它有许多节点 - 通常有 20,000 个节点甚至更多。此 TTreeView 用于停靠界面(DevExpress Docking Library)。当应用程序中的任何
我是一名优秀的程序员,十分优秀!