如何提高Delphi从数据库中取数据和数据加载的速度

目地主要是提高初使化加载的速度,还有一个就是初使化时如果数据太多了,就无法正常显示,像一百万行的话就显示不出来。怎么解决?高手,请赐教!... 目地主要是提高初使化加载的速度,还有一个就是初使化时如果数据太多了,就无法正常显示,像一百万行的话就显示不出来。怎么解决?高手,请赐教! 展开
 我来答
己闻楣Sx
2011-04-28 · TA获得超过1935个赞
知道大有可为答主
回答量:1057
采纳率:93%
帮助的人:891万
展开全部
图形界面的程序,一般是注重人机交互体验的,往往也不只提供一种功能,就像你的程序应该不是仅仅为了显示数据,在显示后,还要响应鼠标、键盘的事件,分别完成不同的功能,最起码点X要退出吧。

所以,加载大量数据,占用CPU和系统总线资源,使得程序无法从容响应其它事件,最佳办法是采用多线程,将占用资源深广的活儿另辟线程完成,主线程负责界面的展示和其它小规模事件的响应。当然了,如果数据加载线程的活儿还没有竣工,而用户刚好就要访问时,主线程就需要有办法了解进度、提示用户等待等能力,当由线程通讯和同步实现。

delphi的TThread类中有Synchronize方法用来同步,也可根据负载度,在主窗体和线程类中派生几个方法,基于windows消息也可实现通讯。
追问
我的想法是每次加载一屏(大概30多行)的数据,然后滚动条滚动时,再次加载一屏。但具体实现不好写。还有就是要用到多核的话,更不懂了,网上这方面的资料太少。
追答
不是多核,是多线程,至于各个线程被安排在哪个核上执行,那是操作系统并行计算策略的问题。
把你的数据加载封装成一个函数或方法,把第多少批作为其中一个参数,在初始化时只装载一批,这样不用线程大概也不至于卡,用单独线程来装载首批数据,可以在初始化时构造线程,由线程去调用装载数据的方法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cywyes99
2011-04-28 · 超过10用户采纳过TA的回答
知道答主
回答量:25
采纳率:0%
帮助的人:22.3万
展开全部
使用服务器端游标:
1、如果你用BDE,默认情况(不访问RecordCount,不Last),打开就是服务器端游标,仅加载屏幕显示的数据,滚屏时会自动再加载。
2、如果你用ADO,请设置CursorLocation=clUseServer。
追问
那怎么分辨用的是ADO还是BDE?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seanpim
2011-04-28 · TA获得超过122个赞
知道小有建树答主
回答量:538
采纳率:100%
帮助的人:114万
展开全部
貌似没有谁的电脑能一下子显示一百万行数据吧。没这么大显示器的哇。数据量大的话,没有必要一下子全部捞出来。如果是查询的话,可以让用户定义一些条件范围来操作。
追问
那怎么来优化数据的读取呢,即使是读得不多,但依然觉得速度慢了。
追答
根据你的查询条件来建立相关的索引,这样会大幅度提高你的查询效率
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuaqing111
2011-04-28 · TA获得超过3581个赞
知道小有建树答主
回答量:3855
采纳率:100%
帮助的人:1392万
展开全部
用哪些加载那些,不用的等需要时再加载;不用的数据源关掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tindlong
2011-04-28 · TA获得超过127个赞
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:119万
展开全部
分段读取..不要一次读完.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式