当用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次,现在不知道怎么才能一次性申请到内存,或者还有什么其它的办法提高效率,请各位
兄弟们指点小弟一下
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次,现在不知道怎么才能一次性申请到内存,或者还有什么其它的办法提高效率,请各位
兄弟们指点小弟一下
解决方案 »
- Socket 取网页内容返回 Invalid Verb
- 批处理文件的调用
- 再问关于邮件附件的问题
- Indy的TIdTCPConnection的SendCmd函数,GetResponse函数有什么用?
- 国耻签名活动,请版主置顶!!!!!!!-----我的心真的很痛
- 有什么软件可以把屏幕上的操作记录下来??
- 命令行的问题.
- 求助:如何把ListBox1选定的值赋给某一个变量??
- 1---------------0----------------------0-------------- 分
- 高分求解!不用not in 怎么得到两个表的差集?
- 关于IdTCPSever用ReadBuffer接收数据的问题
- 初学delphi 怎样比较两个目录下文件是否相同(包括子目录)
http://book.csdn.net/bookfiles/155/1001556649.shtml
为什么要用ClientDataSet存储50000条记录?
这5万条记录还是动态生成的?
如果你把这5万条记录直接保存到真实数据库中,然后只查询出部分数据,速度应该会快很多。
for i:=1 to 50000 do
ClientDataSet1.AppendRecord(['fdas','fdas']);
ClientDataSet1.EnableControls;
往clientdataset里面写怎么可能比往数据库里面写慢?
用的时候加载文件,然后不用Append,而用Update修改记录.