首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Virtual List 虚拟列表 速度慢 卡住 主线程 有关问题

2012-03-16 
Virtual List 虚拟列表 速度慢 卡住 主线程 问题Virtual List 虚拟列表 速度慢 卡住 主线程 问题我处理的

Virtual List 虚拟列表 速度慢 卡住 主线程 问题
Virtual List 虚拟列表 速度慢 卡住 主线程 问题

我处理的是 LVN_ODCACHEHINT 和 LVN_GETDISPINFO,LVN_ODCACHEHINT 里 负责从数据库里读取数据,读到 CArray 里面,LVN_GETDISPINFO 里负责显示数据到列表

目前问题是 LVN_ODCACHEHINT 里从数据库里读取数据太慢,会导致主线程很卡

请问有没有好办法解决,或者提供一个比 虚拟列表 好的列表

[解决办法]
消息是主线程处理的,你在里面做I/O操作当然会卡住了。
可以开个工作线程读数据库,读完后再发消息通知主线程刷界面。流程大致就这样,一个后台线程缓冲数据,不过同步处理起来就不是那么简单了。
[解决办法]
内存里缓存是有必要的。控件随时可能重绘,每次都从数据库取就过分了。
如果信息太多只能缓存一部分,那么消息线程检查缓存没有,可以先给工作线程布置任务,然后回答一个空的结果。工作线程完成任务后,更新缓存,再刷新该item。
[解决办法]
开线程读取数据库,等数据都读到内存,整理好了,再通知主线程用虚列表加载显示
[解决办法]
开线程读取数据库,等数据都读到内存,整理好了,再通知主线程用虚列表加载显示
[解决办法]
这不是虚拟列表显示数据的问题,而是你的程序从数据库读数据慢的问题,使用多线程必然的了,创建一个线程专门处理读数据问题
[解决办法]
你的问题跟虚列表效率没关系啊,关键在于数据处理,数据量很大,不可能全部读取。需要显示哪行的哪些字段,就读取这么一点数据就好了,可以先SetItemCount,然后用一个线程读取需要的数据,就这么点数据不会卡住。如果是快速拖动列表,可以加个sql语句执行的队列,比如20ms执行一次,多条的话只执行第一条,其余删掉。

没什么更好的办法。想效率更高在数据库前端加一层缓存。

热点排行