当用TClientDataSet存储几万笔数据,发现时间花费较长,没有连接任何数据感知构件,程序如下:
  ClientDataSet.EmptyDataSet;
  while I<50000 do
  begin
    S := IntToStr(I)+'fsdfasdfadsfasdfasdf';
    ClientDataSet.Append;
    ClientDataSet.Fields[0].AsString := S;
    I:=i+1;
  end;
  ClientDataSet.Post;
执行第一次时间花费20秒,执行第2次时间只花费10秒左右,估计第一次慢的原因是每做一次APPEND需要
申请一下内存,第二次执行的时候由于内存并没有释放,所以不用在申请内存上花费时间,第一次由于
申请了50000次内存消耗了太多时间,估计如果要提高效率,需要一次性申请好所需的内存或分几次申请,
而不是分成50000次,现在不知道怎么才能一次性申请到内存,或者还有什么其它的办法提高效率,请各位
兄弟们指点小弟一下

解决方案 »

  1.   

    忘记说啦,是用ClientDataSet建立的内存表
      

  2.   

    给你一个连接自己看吧!
    http://book.csdn.net/bookfiles/155/1001556649.shtml
      

  3.   

    你的设计似乎有问题。
    为什么要用ClientDataSet存储50000条记录?
    这5万条记录还是动态生成的?
    如果你把这5万条记录直接保存到真实数据库中,然后只查询出部分数据,速度应该会快很多。
      

  4.   

    ClientDataSet1.DisableControls;
    for i:=1 to 50000 do
      ClientDataSet1.AppendRecord(['fdas','fdas']);
    ClientDataSet1.EnableControls;
    往clientdataset里面写怎么可能比往数据库里面写慢?
      

  5.   

    往clientdataset里面写速度是比往数据库里面写快但是如果数据是固定的话,为什么不写到数据库中,然后读取出来?
      

  6.   

    写一些空记录到ClientDataSet中,然后保存到文件.
    用的时候加载文件,然后不用Append,而用Update修改记录.