ADO,BDE测速比较及讨论(100分)

G

ghosts

Unregistered / Unconfirmed
GUEST, unregistred user!
本人昨晚测试一下ADO,BDE的速度,数据如下:
服务器P4-1.6,SQL-SERVER2000,数据记录数28000条
客户机P2
1、用ADO连接取数据:取全部数据用时15-16秒,取一条记录0.11-0.16秒,基本稳定;

2、用BDE连接取数据:取全部数据用时0.5-0.6秒,取一条记录0.34-0.48秒
但开始联接时间比较长用时12少左右,当取全部数据时,在本地浏览记录时,当用鼠标
移到最后一条记录时,有延迟。

3、用ADO连接取数据,如果用异步连接,响应速度很快,我只设每次取1000条记录,
具体设置,当显示前1000条记录后,怎样操作才能显示其他记录,哪位高手肯指点,
最后详细点,谢谢!!!
这只是本人的测试数据,如果照上面的测试数据,如象BDE比ADO好,但很多书都说ADO好。
欢迎讨论!!!哪一种连接好???
 
你的测试是不科学的,
你的BDE并没有取所有的记录,
取那么多记录,不可能只花那么一点时间
你可以调用FetchAll取所有记录测试一下

BDE中使用了Prepare,你可以预先执行此语句,然后再测试
 
最主要是Barland公司不准备升级BDE的版本了,而ADO由于有微软的支持正蒸蒸日上,而且
从98第二版后Windows自动支持。
所以逼得我们不得不用ADO,跟技术无关,很多技术比微软强的软件最终都无法抵御微软
帝国的进攻。 跟潮流,“与时俱进”是这个时代的骄傲,也是这个时代的悲哀。
 
用原生ADO对象操作,速度比ADO控件快几十倍,决对能与BDE一比高下。
 
to 碧血剑
怎么在Delphi中应用ADO原生对象, 能否具体讲讲
 
catfox:
据说左轻侯的大富翁离线数据浏览器,就使用了ADO的原生对象。你可以到他的“无双谱”
去下载一个看看。
其实用ADO原生对象编程太麻烦,定义各种对象变量让人头疼。不过,效率和速度通常不可兼得。
btw:其实BDE虽然比ADO快一些,但决不可能相差这么大。楼主的比较本来就不公平,所以两者就相差很大了。
 
to lichaohui
我也觉得奇怪,我本来打算用ADO,但由于我的系统是POS系统,要求速度比较快,
所以我才要比较.
to 碧血剑
怎么在Delphi中应用ADO原生对象, 能否具体讲讲,不胜感激
如果你讲的能用,我可以再加分
 
记得在李维的多层应用那本书中,有个用ADO原生对象的例子,但比较简单
 
简单的举个例子
procedure Sample;
var
var RecordSet: _RecordSet;
Connection: string;
begin
OleCheck(CoCreateInstance(CLASS_RecordSet, nil,
CLSCTX_ALL, IID__RecordSet, RecordSet));
Connection := 'Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID=sa;Initial Catalog=ynxfdb;Data Source=aaa';
RecordSet.Open('select * from vda1 ', Connection, adOpenDynamic, adLockOptimistic, adCmdUnspecified);
with Recordset do
begin
MoveFirst;
while Not eof do
begin
showmessage(Fields['xm'].Value);
MoveNext;
end;
end;
end;
无论浏览修改还是打开数据都很快
只是你不能用数据感知控件了
如果你不关心Open的速度,那么可以用TADOQuery控件的Recordset属性控制
浏览和修改字段,也很方便,则以上程序改为
procedure Sample;
var
var AQuery: TADOQuery;
begin
AQuery.Open;
with AQuery.recordset do
begin
MoveFirst;
while Not eof do
begin
showmessage(Fields['xm'].Value);
MoveNext;
end;
end;
end;

 
在C/S版中,很多讨论都提倡不用数据库感知控件,有就会也试试 [:D]
 
dbexpress据说比BDE有更高的数据访问性能,
同时他也支持SQL Server了

访问SQL Server用什么都行,
ADO, BDE, dbExpress, SQLDirect,

我并不同意他们使用ADO的COM对象,能大大提高访问速度的观点
只是在Delphi中ADO组件,需要设置一些属性,方能达到较好的效果

像前一段时间,有人编写的大富翁离线浏览器,
浏览的速度是很快的,而其他的一些同类软件,
就满多了,你可以看看作者的源代码,
是怎么设置ADO的属性的
 
我以前做过一套BDE版的无纸考试系统,无盘站20个工作站用,没问题,后来大脑一热,
升级到ADO,升了一个星期,但试用时有问题,20台机器同时开时,总有几台机不能正常
运行程序,提示为:不能更新,当前行被锁定。ADO不如BDE???我也不明白!!
不过我用ADO,最欣赏的是,给客户装的时间简单!
 
有些时候并不是仅仅设属性就能解决的
例如浏览一个仅仅几千条数据的表时
with ADOQuey do
begin
First;
while not Eof do
begin
edit1.text := Fields[0].AsString;
next;
end;
end;

with ADOQuey.Recordset do
begin
MoveFirst;
while not Eof do
begin
edit1.text := Fields[''].Value;
Movenext;
end;
end;
这两段代码的运行速度相差几十倍
本人的建议是把ADO控件和原生对象结合起来用,才能事半功倍
我并不赞同一味的否定那一种方法,只要自己觉得好用就OK
 
对于Delphi的数据集,
在遍历前后分别加上
DisableControls;
try

........

finally
EnableControls;
end;
看看速度又多大的区别,
你再测试以下,把测试结果告诉我,
我好决定以后是用哪种方法
 
我是加了DisableControls和EnableControls测的,只是举例子时没有写而已。
5000条记录,速度相差30倍
 
ado功能丰富,涉及到连接接口多,速度显慢
bde 较之少,所以快了,呵呵
 
to 碧血剑
能讲一下异步连接的设置和怎样使用,最好给个例子.
 
顶部