如何提高Delphi从数据库中取数据和数据加载的速度
目地主要是提高初使化加载的速度,还有一个就是初使化时如果数据太多了,就无法正常显示,像一百万行的话就显示不出来。怎么解决?高手,请赐教!...
目地主要是提高初使化加载的速度,还有一个就是初使化时如果数据太多了,就无法正常显示,像一百万行的话就显示不出来。怎么解决?高手,请赐教!
展开
6个回答
展开全部
图形界面的程序,一般是注重人机交互体验的,往往也不只提供一种功能,就像你的程序应该不是仅仅为了显示数据,在显示后,还要响应鼠标、键盘的事件,分别完成不同的功能,最起码点X要退出吧。
所以,加载大量数据,占用CPU和系统总线资源,使得程序无法从容响应其它事件,最佳办法是采用多线程,将占用资源深广的活儿另辟线程完成,主线程负责界面的展示和其它小规模事件的响应。当然了,如果数据加载线程的活儿还没有竣工,而用户刚好就要访问时,主线程就需要有办法了解进度、提示用户等待等能力,当由线程通讯和同步实现。
delphi的TThread类中有Synchronize方法用来同步,也可根据负载度,在主窗体和线程类中派生几个方法,基于windows消息也可实现通讯。
所以,加载大量数据,占用CPU和系统总线资源,使得程序无法从容响应其它事件,最佳办法是采用多线程,将占用资源深广的活儿另辟线程完成,主线程负责界面的展示和其它小规模事件的响应。当然了,如果数据加载线程的活儿还没有竣工,而用户刚好就要访问时,主线程就需要有办法了解进度、提示用户等待等能力,当由线程通讯和同步实现。
delphi的TThread类中有Synchronize方法用来同步,也可根据负载度,在主窗体和线程类中派生几个方法,基于windows消息也可实现通讯。
追问
我的想法是每次加载一屏(大概30多行)的数据,然后滚动条滚动时,再次加载一屏。但具体实现不好写。还有就是要用到多核的话,更不懂了,网上这方面的资料太少。
追答
不是多核,是多线程,至于各个线程被安排在哪个核上执行,那是操作系统并行计算策略的问题。
把你的数据加载封装成一个函数或方法,把第多少批作为其中一个参数,在初始化时只装载一批,这样不用线程大概也不至于卡,用单独线程来装载首批数据,可以在初始化时构造线程,由线程去调用装载数据的方法。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用服务器端游标:
1、如果你用BDE,默认情况(不访问RecordCount,不Last),打开就是服务器端游标,仅加载屏幕显示的数据,滚屏时会自动再加载。
2、如果你用ADO,请设置CursorLocation=clUseServer。
1、如果你用BDE,默认情况(不访问RecordCount,不Last),打开就是服务器端游标,仅加载屏幕显示的数据,滚屏时会自动再加载。
2、如果你用ADO,请设置CursorLocation=clUseServer。
追问
那怎么分辨用的是ADO还是BDE?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
貌似没有谁的电脑能一下子显示一百万行数据吧。没这么大显示器的哇。数据量大的话,没有必要一下子全部捞出来。如果是查询的话,可以让用户定义一些条件范围来操作。
追问
那怎么来优化数据的读取呢,即使是读得不多,但依然觉得速度慢了。
追答
根据你的查询条件来建立相关的索引,这样会大幅度提高你的查询效率
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用哪些加载那些,不用的等需要时再加载;不用的数据源关掉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分段读取..不要一次读完.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询