0

有没有一种方法,或者由 CListCtrl 原生支持,或者使用一些编码技术,来更新虚拟列表模式 CListCtrl 中的一大块数据,而不是一次更新一个?

默认情况下,当列表需要单元格的数据时,我们通过 LVS_GETDISPINFO 处理它。如果我说 8x8 (64) 单元格可见并不断更新,它基本上就是将处理程序调用到 LVS_GETDISPINFO 64 次。这是很好的预期行为,但我相信重复调用此函数会产生少量开销,而不是仅在 for 循环中为所有 64 个单元格执行此操作。这对我来说是个问题,因为我的控件不断更新所有 64 个单元(想象一下 TCP 数据包跟踪之类的东西)。

CListCtrl 当然支持缓存(虽然在我的情况下没用),但我再次觉得一遍又一遍地调用 LVS_GETDISPINFO 处理程序有开销。一个简单的例子是,在获取数据之前确定我指向数据库的指针是否有效(非空)......本质上,这行代码被调用了 64 次,而我本可以只做 1 次,然后循环指针以获取我的 64 个单元格的数据。此外,指针只是一个简单的示例,我正在做的更多事情(无法避免)我不会解释,因为它需要代码。

由于时间至关重要,我不能回去重写我自己的更有效的列表 ctrl,因为通过直接继承它来复制我享受的 CListCtrl 的其他好处需要时间。现在唯一的问题是速度。如果有办法,比如说一个处理程序,它传入一个以空结尾的单元格数组进行更新,这样我们就可以在一个函数中批量更新它,那就太好了。

或者是否有可能知道 LVS_GETDISPINFO 中哪些单元格正在等待更新,因此,如果可能,我更新所有单元格,并验证整个更新以停止获取 LVS_GETDISPINFO?

有任何想法吗?提前致谢。

4

0 回答 0