如何解决mfc中listview插入上万条记录的效率问题??????

时间:2020-12-26 23:27:06
一个前端程序从后台取得上万条记录,插入listview中。我发现和后台通讯取得数据的速度比较快,但是在将这上万条记录插入listview中要耗费十几秒,而且这段时间CPU100%被占用了。
有一个朋友在用Delphi的VCL框架实现这种应用的时候,有这样的方案,就是不将数据全部插入listview中由windows维护,而是自己维护一个数据缓冲区,listview根据显示的长度显示其中的内容,当拖动滚动条的时候,VCL框架可以告知新的起始记录位置和结束记录位置,从缓冲区中取出相应的数据放入listview中即可,避免了上万条记录插入listview所耗费的时间。
我对VCL框架不是太熟悉,可能描述的不是太准确,就是这样一个思路,不将全部数据插入listview中,而是显示当前需要显示的数据。但是我觉得这需要listview
1. 不插入记录而可以置需要显示的总记录数,这样滚动条的宽度才能反映真实的数据量。
2. 在滚动条拖动的时候能够通知当前的起始和结束位置
不知道MFC的框架能不能实现这样的功能或者有其它的解决办法,请大侠们指教。有思路我们也可以共同探讨。谢了。

6 个解决方案

#1


自己顶一下

#2


use LVS_OWNERDATA
http://dev.csdn.net/develop/article/22/22243.shtm

#3


膜拜了蒋版主的大作,受益匪浅。


如果用滚动条和缓冲来做的话,有点建议:
1,可以将记录分页,每页的记录数由界面情况来定(可以定位界面全屏显示多一点)。
2,将滚动条的移动range和总页数对应起来。
3,响应滚动条拖动消息并加载一个页(或左右几个页)的数据到界面。
4,子类化滚动条,拖动的时候界面不滚动,在鼠标附近显示页数,拖动完毕,加载适当的页。

#4


呵呵!我也参合点!

用一种动态添加的方法,要显示什么的时候我再添加进去。很垃圾!

#5


up

#6


我的做法就是分页显示

#1


自己顶一下

#2


use LVS_OWNERDATA
http://dev.csdn.net/develop/article/22/22243.shtm

#3


膜拜了蒋版主的大作,受益匪浅。


如果用滚动条和缓冲来做的话,有点建议:
1,可以将记录分页,每页的记录数由界面情况来定(可以定位界面全屏显示多一点)。
2,将滚动条的移动range和总页数对应起来。
3,响应滚动条拖动消息并加载一个页(或左右几个页)的数据到界面。
4,子类化滚动条,拖动的时候界面不滚动,在鼠标附近显示页数,拖动完毕,加载适当的页。

#4


呵呵!我也参合点!

用一种动态添加的方法,要显示什么的时候我再添加进去。很垃圾!

#5


up

#6


我的做法就是分页显示