MFC CListrCtrl:批量更新虚拟列表数据

时间:2012-01-02 15:44:23

标签: performance mfc bulk clistctrl

有没有一种方法,无论是CListCtrl原生支持还是使用某种编码技术,都可以在虚拟列表模式CListCtrl中更新一块数据,而不是一次更新一个?

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

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

由于时间紧迫,我不能回去重新编写我自己更有效的列表ctrl,因为通过直接继承它来复制我喜欢的CListCtrl的其他好处需要时间。现在唯一的问题是速度。如果有一种方法,比如像处理程序那样传递一个以null结尾的单元格数组进行更新,以便我们可以在一个函数中批量更新它,这将是很好的。

或者也许可以知道LVS_GETDISPINFO中哪些单元格正在等待更新,这样,如果可能的话,我会更新所有单元格,并验证整个更新以停止获取LVS_GETDISPINFO?

有什么想法吗?提前谢谢。

0 个答案:

没有答案