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

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执行一次,多条的话只执行第一条,其余删掉。

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