在我们的应用程序中,我正在从 TStringGrid 移动到 TVirtualStringTree 组件。正在显示大量数据(最多 50000 行和 5 列)。一列包含一行或多行文本。我设法在 stringgrid 中使用'DrawCell'以最佳性能实现多行功能:即时重绘所有行(调整大小时)和无阻碍地滚动(我在内存中有一个行高列表,将在需要重绘时更新) .
将此多行功能转移到 VirtualStringTree 的性能不如 stringgrid 替代方案。我尝试了许多实现,但还没有成功。这在 VirtualStringTree 安装包的 Demo 应用中很容易重现:
- 在“MultilineDemo”表单中,将 VirtualStringTree 的“rootNodeCount”设置为 10.000。
- 运行演示时,选择“根据节点文本自动调整节点高度”。
初始重绘/重绘会占用大量 CPU 时间。每次调整大小时,跳到顶部/底部会导致相同的现象,甚至导致“堆栈溢出”异常(但这是另一个问题......)。'OnMeasureItem' 方法被称为太多,我看到它的方式(即使在'MouseMove' 事件上)。
有没有人遇到过这个问题并设法找到解决方案?