有谁试过CacheSize?我怎么感觉没什么用呢?

解决方案 »

  1.   

    如果有100000条数据,我设CacheSize为10,为什么客户端最一开始就是100000条数据呢?
      

  2.   

    Tadodataset.cachesize这个属性没人试过吗?
      

  3.   

    Specifies the size of the cache for the dataset.property CacheSize: Integer;DescriptionSet CacheSize to control how many rows the ADO dataset抯 provider keeps cached in its buffer and how many to retrieve at one time into local memory. Default value of CacheSize is 1 and the minimum allowed value is 1.For example, if CacheSize is set to 20, when the dataset is first activated the associated provider retrieves the first 20 rows into local memory. As the row pointer is moved through this recordset, the provider retrieves the data from the local memory buffer. If the dataset抯 row pointer moves beyond the last of these 20 buffered rows, the provider retrieves the next 20.CacheSize represents the maximum number of rows to retrieve at one time. If the number of rows remaining to be retrieved is less than CacheSize, the remaining rows are retrieved and no exception is raised. The number of rows that can be returned by the provider can be less than all of the rows if the ADO dataset component抯 MaxRecords property is set to other than the default (all rows).Note: The rows retrieved from the cache do not reflect any changes made by other concurrent users of the data.    取自帮助文件,自己翻译吧。
      

  4.   

    没什么好改的,增加CACHESIZE能减少一些数据读取操作,但其实要取得的数据总量是差不多不变的,在远端网络良好的情况下,没什么意义。
      

  5.   

    to:DarkMonk
       资料说先取CACHESIZE设定的记录数,当需要的不在客户端时再取下一批记录吗?我试过(vb和delphi)不是这样。
      

  6.   

    数据的记录会调过来存放到内存的区域里,而在cache里存在的记录数才由cachesize决定,understand?
      

  7.   

    对对,这就是cache与memory的区别
      

  8.   

    依我理解:
      就是当ADO一打开时,它不是一下子把所的数据都Load到内存里,而是依据Cachsize的大小,每次Load 到内存里数据量就是Cachsize那么多,而User想看下一笔数据,ADO才把数据装到内存!!这是我的辍见,可能不对
      

  9.   

    看来大家的理解不一致啊。不知各位写过读文件的程序没?
    是不是先定义了一个Buffer?大小可能是10K(我的习惯),然后每次ReadFile读一块进来。读一次以后,这个Buffer里面的数据放到另一个内存区域,在这个内存区域里面,大小是动态的,是根据读取的数据总量来确定的。当然我们可能会有一些优化方法,如果当前需要操作第16K的数据时,那我只需两次的数据读取操作,余下的数据等需要的时候再去操作吧。Cache就象是这块Buffer,重复利用。数据集就是那个内存区域,可能不包含全部的记录,至少目前用到的那里都有。
      

  10.   

    谢谢大家的回答!不过我还是不明白。
    TO:bluemeteor(挂月||╭∩╮(︶︿︶)╭∩╮) and DarkMonk(黑心和尚)    cachesize指的缓存应该是ADO在内存中维护的高速缓存(存储临时纪录),而不是物理意义上(CPU和硬盘上)的缓存。这个cache应该是逻辑的而不是物理的。
    TO:gzllich(刚从泥坑里出来)  cachesize设定的数值比实际的记录数大不会出错。你的结论是试验过的吗?
    TO:beata88(学习,学习,再学习!) 当你使用SERVER类型的游标时,不管你cachesize设为多少数据库都不会传递任何数据,而是把数据存在它自己的缓存里(例如:SQLSERVER),但是按照资料确是应该先传cachesize设定的记录数,可是我测Recordset.recordcount却为-1。当你使用CLIENT类型的游标时,不管你cachesize设为多少数据库都会把所有的数据传递给你(还是测Recordset.recordcount)。(奇怪的是似乎数据库服务器的缓存里好像也有这些数据,并没有释放所占用的空间)所以我很迷茫cachesize究竟有没有用?! 大家觉得会不会是这样:ADO引擎把从数据库服务器中取得的数据放到ADO的缓存中直到cachesize设定的记录数后再传给你的程序,重复这个过程直到把所有的纪录传递给你的程序。(小弟愚钝,望高人指点) 有兴趣的帮忙UP一下,谢谢!!
      

  11.   

    哈哈哈哈,你去读recordcount时,dataset便会向服务器请求传输所有数据,所以,只要你去读recordcount,你所设置的cachesize就没用了,引起传输所有数据的方法或过程还有locate等等,因此,你要测试cachesize的好处,你就不要检测recordcount,也不要在程序中用locate等等。你只能通过对客户端返回时间的精确测量来体会他的好处。不知道我说的对不对,还望有高人赐教。哈哈哈哈。
      

  12.   

    指示缓存在本地内存中的 Recordset 对象的记录数。
    设置和返回值设置或返回必须大于 0 的长整型值。默认值为 1。
    使用 CacheSize 属性可控制提供者在缓存中所保存的记录的数目,并可控制一次恢复到本地内存的记录数。例如,如果 CacheSize 为 10,首次打开 Recordset 对象后,提供者将前面 10 个记录调入本地内存。当在 Recordset 对象中移动时,提供者返回本地内存缓冲区中的数据;一旦移动超过缓存中最后的记录,提供者便将数据源中随后的 10 个记录恢复到缓存。可以在 Recordset 对象的存活期调整该属性的值,但是更改该值只影响随后从数据源调入缓存的记录数。只更改属性值将不会更改缓存中的当前内容。如果要检索的记录较 CacheSize 指定的少,提供者将返回其余的记录,不会产生错误。不允许将 CacheSize 设置为零,否则将返回错误。
      

  13.   

    cache 的意思是:高速缓冲存储器,你知道这个  CacheSize 的意思吗!!!