向大俠求教: ADO組件TADOQuery的CacheSize屬性使用問題!(100分)

  • 主题发起人 主题发起人 liyu
  • 开始时间 开始时间
L

liyu

Unregistered / Unconfirmed
GUEST, unregistred user!
看了TADOQuery的CacheSize屬性的幫助﹐其作用相當于TClienDataSet的PacketSize﹐但我在
使用過程中卻發現它并未起到該作用﹐無論如何設置都將全部記錄放入客戶端﹐這樣感覺效率很慢﹐
尤其是表中資料較多時更顯突出﹐請問大俠們如何解決?
 
在李维的《delphi5.X ADO/MTS/COM+》书中有很详细的关于cachesize的介绍
ADO的Cahcesize决定了当客户端向ADO驱动程序提出存取数据的要求后,ADO驱动程序会在
它的缓存中暂存多少条数据。
一、增加cahcesize可以增加ADO应用程序的执行效率,因为这样可以减少网络的roundtrip
以及较充分地利用TDS Packect的大小
二、增加Cahcesize会增加启动数据表的事件,因为ADO需要传递更多的数据
三、当cahcesize接近1000时ADO的执行效率的时间/空间比方面是乎是非常好的设定。
看了这些应该会对你有帮助。
 
来晚了,又被抢先了.
 
你的意思好像是该用batchupdate功能
 
ADO的CacheSize是ADO引擎与后台数据库进行数据交换时的缓冲区
而TClientDataset的PacketSize是客户端与ADO引擎进行数据交换时的缓冲区
图例如下,中间层用ADO进行数据库操作,客户端用TClientDataSet
客==============中==============数
户=CDS缓冲区====间=ADO缓冲区====据
端==============层==============库
而BDE中的缓冲设置必须到BDE设置程序里面进行修改
至于具体值设置为多少,应该根据实际情况测试确定
李维给出的1000的数字只是一个大概的数值,
就我的使用经验,取值在100-1000之间比较合适
必须写实际程序进行测试才行(跟表组织结构有关)
 
謝謝各位的回答﹐但目前小弟無論如何設定CacheSize的值時﹐都將表中所有記錄放入客戶端
DBGrid中﹐如果表中記錄數較多時(超過10萬)Open TADOQuery時大約花數十秒鐘﹗
 
多人接受答案了。
 
后退
顶部