TADOQuery优化设置

下面是使用ADO时程序员应该知道的规则。只要程序员了解并且适当地使用
在应用系统中,那么让ADO和ADOExpress拥有良好的执行效率并不是困难的事
情:
1)尽量找到真正的原生ADO和OLEDB驱动程序。尽量不要使用ADOFor
ODBC驱动程序,因为这种架构使用在一些数据库时会发生不正常的执行状况,也
比原生ADO和OLEDB驱动程序来得慢一些。
2)ADO驱动程序的品质大大地影响了应用系统的执行效率,因此,你应该为
你的数据库找一个良好的ADO驱动程序。
3)尽量使用客户端的CursorLocation,并且只存取应用程序真正需要的数据到
客户端,使用少量、多次的方式存取数据。使用少量、多次的方式存取数据不管是
对于主从架构或分布式多层应用系统都是很好的方式。特别是对于Internet/Intranet
和电子商务应用系统来说,使用这种方式可以确保应用系统能够在许多用户同时使
用的状况下仍然保有合理的执行速度。
4)适当设定CacheSize属性值。这是一个绝对不可忽略的设定,它的重要性仅
次于CursorLocation。虽然在前面讨论的内容中我们可以发现设定CacheSize接近
1000左右可以得到最好的效率/空间比,但是必须考虑当应用系统同时被许多用户
同时存取时,在一瞬间网络会传递的数据量有多大。因此你可能必须根据你的应
用系统的执行状况来适当地减少CacheSize为100~1000之间的数值。
5)许多讨论如何优化ADO的文件都会建议使用存储过程,因为这些文件都假
设你只会使用MSSQLServer。但是不管使用什么数据库,如果可以的话,那么对
于需要处理大量数据的工作,使用存储过程绝对可以增加ADO应用程序的执行效
率。因为在这种情形下,存储过程可以让这些大量的数据不传递到客户端,而是
直接在数据库中处理数据,这可以避免造成网络严重的负荷。即使你不想使用存
储过程,因为你可能会使用不同的数据库,对于一些经常会执行的工作,至少也
应该使用PreparedADO/ADOExpress组件,这样也可以增加应用程序的执行效率。
6)对于不会回传结果数据集的工作,例如使用Update、Delete等修改大量数据
的工作,可以考虑结合存储过程和ADO的异步执行模式。这样可以大大增加ADO
应用程序的执行效率以及减少ADO应用程序的反应时间。
7)ADO的Recordset对象,或ADOExpress的TADODataSet、TADOQuery和
TADOTable组件虽然都可以使用Select的SQL命令存取数据,并且让用户修改数据
再更新回数据源中。但是,如果你正在开发的ADO应用程序会执行大量的数据修
改的工作,那么你应该使用数个不同的TADODataSet、TADOQuery和TADOTable
组件。其中一个用来选取用户需要的数据,并且使用其他的TADODataSet,
TADOQuery和TADOTable组件来执行Update和Delete等的SQL命令,这样可以增加
ADO应用程序的执行效率。
8)本项和第7项有关,即当你使用ADO开发分布式多层应用系统时,尽量设
定TDataSetProvider组件的ResolveToDataSet为True。让ADO本身来处理数据的修
改,而不要使用MIDAS的SQLResolver,因为ADO可以更好地处理数据修改的数
据。但是请注意,由于ADOExpress目前有一个臭虫,因此在分布式多层应用系统
中不要使用TADODataSet、TADOQuery和TADOTable组件来执行Update和Delete
等的SQL命令。请直接使用执行SelectSQL命令的TADODataSet、TADOQuery和
TADOTable组件来执行修改数据的工作。
9)尽量使用Optimistic和BatchOptimistic这两种类型的LockType,因为它们不
但会降低系统锁定的资源,也可以增加ADO应用程序的执行效率。
10)ADO的BatchUpdateJ胶虰DE/IDAPI的CacheUpdate非常类似,不管是
用在主从架构或Internet/Intranet及电子商务应用系统中都可以增加ADO应用程序
的执行效率。因此程序员应该尽量使用这种模式来开发ADO应用程序。
11)TADODataSet、TADOQuery和TADOTable组件的MarshalOptions控制了客
户端修改的数据如何传递回OLEDBProvider或数据源进行更新的工作。在分布式
多层应用系统和Internet/Intranet及电子商务应用系统中我们绝对不希望传递任何多
余的数据,以避免浪费网络资源。因此适当地设定MarshalOptions属性值为
moMarshalModifiedOnly也可以增加应用系统的执行效率。
12.对于和图形用户接口有关的ADO应用程序,例如,如果需要在TDBGrid组
件中显示大量的数据,那么不要忘记我们早已熟知的技巧,暂时关闭数据感知组
件和ADO存取组件之间的关系,等待数据存取的工作完成之后再启动连接,那么
将可以大大增加图形用户接口响应用户的效率。这就是说,当应用程序要结合大
量数据存取和图形用户接口时,不要忘记调用DisableControls和EnableControls这
两个方法。 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很久没有发布东东了,今天看到盒子上有朋友发布了个三层的东东, 下来大概看了看,貌似使用起来不太方便,曾经用过ASTA和RmoObject,都不是那么让人满意,BUG多,并且庞大需要安装,使用十分不方便。 为了继续支持我喜欢的DELPHI和可爱的盒子, 特发布个自己写的远程数据库对象希望能给大家平常的工作带来便利和高效(偶自己和同事们都用了挺长时间,十分稳定易用)。 用DELPHI的朋友少不了要和数据库打交道,一般小程序都使用ACCESS做数据库感觉十分方便,不用装服务端,客户端不用单独装驱动, 发布程序时直接目录一拷贝就完事,但缺点是不方便从其它计算机对它进行访问, 有了偶这个东东,就可以很方便容易的实现咯。 ps : 就是连接Oracle和mysql,客户端也可以不用装驱动哦 使用步骤 解压后找个地方存放 将GobUnit目录添加到delphi的搜索路径 将DXSockEnt30(我改过bug的版本)的3个子目录也添加到delphi的搜索路径 即可使用和编译所有偶提供的代码 FAQ: 这个东东都提供什么功能? 答:提供最简单方便高效的方式,通过ADO对象实现远程数据库 这个东东为什么不封装成控件? 答:本类以单元形式封装,只要加到搜索路径后直接引用即可,无需经过安装等麻烦的步骤。 这个东东适合应用在什么场合? 答:适合应用于小型分布式程序。 这个东东掌握起来有难度吗? 答:没有任何难度,就和你开发本地数据程序一样简单。 这个东东可以应用在我已有的程序里吗? 答:由于我使用的是AdoQuery作为数据集载体,所以无需更改为其他控件,现有的本地数据库程序也可以非常容易的改造为支持分布式数据库。 这个东东稳定吗? 答:经自己长期做小白鼠广泛的实际应用实践,发现方便,稳定。 服务端的端口号是多少? 答:服务端的端口号可以随意设置,只要不和其他程序冲突就可以,并且客户端连接服务端时必须端口一致. 如果服务端重启了客户端需要重启吗? 答:不用,客户端只要连接上服务端以后就有自动断线重连的功能。 这个东东免费吗? 答:完全免费,并且开放所有源代码,你可以随意改进,传播它,当然如果更好用了,记得给我也发一份 :)(要保留偶的版权和注释信息哦) 这个东东使用到了那些控件? 答:delphi的ADO控件,INDY,以及第3方Dxsock(服务端用)。 同时发布的还有我自己积累的几个常用单元,有日志,调试,tcp的通用服务和客户端模块等,同样都是十分有用的东东。 这个东东有demo程序吗? 答:有最简单的示范程序,但时间关系只写了最简单的演示代码,还有很多值得你去挖掘的实用接口和单元。 我有了改进版本,怎么联系这个东东的作者? 答:QQ 22900104 ,Email 22900104@qq.com 马敏钊 发布这个东东的目的是什么? 答:好用的东东大家分享,共同学习,共同进步,希望大家都能发扬开源精神。 构架说明: 大概是这样的,偶有一个服务器对象,负责提供数据库服务,在需要提供数据服务的程序里创建它即可。 使用起来十分简单 首先引用服务端单元 uses UntRmodbSvr; //创建远程服务对象 (参数1 服务端口号 日志对象,如果不需要记录日志请填nil) Gob_RmoDBsvr := TRmodbSvr.Create(FSvrPort, nil); //连接数据库 可以是ADO支持的所有数据库 调用TDBMrg提供的获取各种数据库的链接字符串即可,这里连接Access数据库 Gob_RmoDBsvr.ConnToDb(TDBMrg.GetAccessConnStr('cfg.mdb')); 到此为止,2行代码使你的这个程序具有了将数据库发布出去的能力,其它机器的程序可以方便的通过它访问到数据库,像使用本地数据库一样。 客户端只需连接服务端即可,不管服务端是什么样的数据库,无需安装任何数据库驱动。 uses UntRemSql; //创建客户端对象 RmoClient := TRmoHelper.Create(); //连接服务端 填入服务端地址和端口(与服务端端口一致即可) Result := RmoClient.ReConnSvr(ISvrIP, Iport); 2行代码使你的客户端程序具有了方便的访问到远端的数据库,像使用本地数据库一样,并且你原有的单机数据库程序可以很方便改为远程数据库。 具体使用方法可以查看DEMO程序 为了方便交流建了个QQ群,欢迎大家参与 15637473

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值