gpt4 book ai didi

delphi - TVirtualStringTree - 可变行高优化

转载 作者:行者123 更新时间:2023-12-01 23:31:03 35 4
gpt4 key购买 nike

在我们的应用程序中,我正在从 TStringGrid 组件迁移到 TVirtualStringTree 组件。正在显示大量数据(最多 50000 行和 5 列)。一列包含一行或多行文本。我设法在字符串网格中使用“DrawCell”实现多行功能,并具有最佳性能:即时重绘所有行(调整大小时)并顺利滚动(我在内存中有一个行高列表,需要重绘时将更新) .

将此多行功能转移到 VirtualStringTree 的性能不如 stringgrid 替代方案。我尝试了很多实现但尚未成功。这可以在 VirtualStringTree 安装包的演示应用程序中轻松重现:

  1. 在“MultilineDemo”表单中,将 VirtualStringTree 的“rootNodeCount”设置为 10.000。
  2. 运行演示时,选择“根据节点文本自动调整节点高度”。

初始重绘/重绘将需要一段时间,使用大量 CPU。每次调整大小后,跳转到顶部/底部都会导致相同的现象,甚至导致“堆栈溢出”异常(但这是另一个问题......)。在我看来,“OnMeasureItem”方法被调用得太多了(即使是在“MouseMove”事件上)。

有人遇到过这个问题并设法找到解决方案吗?

最佳答案

This is easily reproducable in the Demo application of the VirtualStringTree installation package

至少通过将对 ReinitNode() 的调用包装在 BeginUpdate()EndUpdate() 中,可以轻松解决此性能问题:

 MLTree.BeginUpdate();
try
MLTree.ReinitNode(nil, True);
finally
MLTree.EndUpdate();
end;

今天我稍微修改了示例项目和虚拟 TreeView ,示例项目现在工作得更流畅了。试试 latest source code from GitHub .

关于delphi - TVirtualStringTree - 可变行高优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30216707/

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