for......
   1、ADOdataset1从数据库取数据(1000条取一次) 
   2、把ADOdataset1的数据付值给ADOdataset2(1000条付值一次)
   3、提交ADOdataset2的数据(1000条提交一次)
继续下1000条一共有100万条开始的1000条快,后来越来越慢。到50万的时候,1000条要好久好久,好象死了一样!请教问题出在什么地方??能解决给300分,决不失言!

解决方案 »

  1.   

    这个问题有人问过多次,从来没有好的解答,普遍认为是delphi的内存管理不力。
      

  2.   

    很悲哀的方法,就是不用ADO。呵呵
      

  3.   

    ado是微软提供的组件,delphi只是封装了windows提供的许多接口。
    如果前面的50万条数据处理都没有问题,我想ado是没有问题的。
    有没有考虑过不是ado的问题,或者是数据库的问题呢?
      

  4.   

    如有人能用ADO方式不变,并且还能解决楼主这个问题,我也给他100分
      

  5.   

    GetTickCount计一下时间,写个日志分析一下。
      

  6.   

    用Tadoquery
    CursorLocation 改为 clUseServer
    速度可以提高一倍
    ,我用几十万条测试过.数据越多越快
      

  7.   

    已经设为clUseServer了!我个人认为是第2步的问题。取数据和提交数据问题不大,就是从数据集1复制到数据集2的时候时间逐渐增长!等我按newyj(吴刚vs西西弗)的方法测试过了,再看看问题是不是第2步!
      

  8.   

    问题找到了!不好意思,最近太忙!问题出在post上!(采用updatebatch()方式)
      
    同样的数据集,在内存中操作
      如果数据量为零,插入一条数据,post用时7毫秒(没有写到数据库)
      如果数据量为1000000,插入一条数据,post用时>1秒(没有写到数据库)差别如此之大!newyj(吴刚vs西西弗)的原理是对的!
      

  9.   


    解决办法:   各位可以继续讨论!
       发言者有分!   本楼以上的兄弟全部到
    http://expert.csdn.net/Expert/topic/1296/1296001.xml?temp=.8862421 
    取分,本贴继续讨论!   我现在用SQL语句select 出来的时候设WHERE 1<0 这样数据量一直都是0
       基本解决我的问题!
      

  10.   

    楼主,你的意思是说,ADOdataset2中的数据一直没有清除还是,ADOdataset2在获取元数据的时候从数据库中将所有的数据都拎过来了?
      

  11.   

    to INeedCa(缺钙) : 
    是的,我以前的做法是:一直累加到ADOdataset2中,没有清除。
           现在的做法是:累加一段到1000条后,关闭,用我的WHERE语句再打开,
                        这样ADOdataset2中的数据量又为零了不知道你有什么好办法,清除ADOdataset2中的数据呢?