起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 500|回复: 13

循环手动提交SQL,内存不断增长问题**

[复制链接]
发表于 2007-4-21 17:30:25 | 显示全部楼层 |阅读模式
在一个循环中通过TQUERY执行SQL语句提交数据,发现在循环过程中内存不断增长,最终BUSSINESS会占用500多M内存,严重影响运行速度:
代码如下:
with RZTS_QUERY do//连接生产数据库取数据取分机号货类操作量
     begin
          ProgForm.Text:='采集分机类货类认证台时:正在取原始数据';
          ProgForm.Value:=0;
          curapp.ProcessMessages;
          Close;
          Params.ParamByName('STAT_MONTH1').Value:=StrUtils.LeftStr(YearMon,4)+'-'+StrUtils.Rightstr(YearMon,2);
          Params.ParamByName('STAT_MONTH2').Value:=StrUtils.LeftStr(YearMon,4)+'-'+StrUtils.Rightstr(YearMon,2);
          Params.ParamByName('STAT_MONTH3').Value:=StrUtils.LeftStr(YearMon,4)+'-'+StrUtils.Rightstr(YearMon,2);
          Open;
          First;
          //DataSetIniData.Close;
          //DataSetIniData.Open;
          ProgForm.Text:='采集分机类货类认证台时:';
          ProgForm.MaxValue:=Recordcount;
          ProgForm.Value:=0;
          curapp.ProcessMessages;
          query1.Close;
          for i:=0 to RecordCount-1 do
          begin
               ProgForm.Text:='采集分机类货类认证台时:'+FieldByName('MACH_COD').Asstring+'->'+FieldByName('CARGO_KIND_COD').Asstring;
               ProgForm.Value:=i;
               curapp.ProcessMessages;

               Guid:=variants.VarToStr(TContextUtils.GetParam(self.Context,'Biz:\CAISXT\DICT\YWCSZ.ParamGroup','GUID').value);

               query1.CommandText:='insert into MONTH_INI(ID,INI_TYP,YEARMON,SYS_COD_CARGO,SYS_COD_MACH,CARGO_KND_COD,MACH_COD,INI_COD,INI_NUM)'+
                                                ' values(:ID,:INI_TYP,:YEARMON,:SYS_COD_CARGO,:SYS_COD_MACH,:CARGO_KND_COD,:MACH_COD,:INI_COD,:INI_NUM)';
               query1.Params.ParamByName('ID').asstring:=Guid;
               query1.Params.ParamByName('INI_TYP').asinteger:=0;//指标;
               query1.Params.ParamByName('YEARMON').asstring:=YearMon;
               query1.Params.ParamByName('SYS_COD_CARGO').asinteger:=1;//生产系统
               query1.Params.ParamByName('SYS_COD_MACH').asinteger:=0;//生产系统
               query1.Params.ParamByName('CARGO_KND_COD').asstring:=FieldByName('CARGO_KIND_COD').Asstring;//
               query1.Params.ParamByName('MACH_COD').asstring:=FieldByName('MACH_COD').Asstring;
               query1.Params.ParamByName('INI_COD').asstring:='RZTS';
               query1.Params.ParamByName('INI_NUM').AsFloat:=FieldByName('WORK_TIM').AsFloat;
               query1.Execute;
               //query1.
               {DataSetIniData.Append;
               DataSetIniData.FieldByName('INI_TYP').Asinteger:=0;//指标;
               DataSetIniData.FieldByName('YEARMON').asstring:=YearMon;
               DataSetIniData.FieldByName('SYS_COD_CARGO').asinteger:=1;//生产系统
               DataSetIniData.FieldByName('SYS_COD_MACH').asinteger:=0;//生产系统
               DataSetIniData.FieldByName('CARGO_KND_COD').asstring:=FieldByName('CARGO_KIND_COD').Asstring;//
               DataSetIniData.FieldByName('MACH_COD').asstring:=FieldByName('MACH_COD').Asstring;
               DataSetIniData.FieldByName('INI_COD').asstring:='RZTS';
               DataSetIniData.FieldByName('INI_NUM').AsFloat:=FieldByName('WORK_TIM').AsFloat;
               DataSetIniData.Post; }
               //DataSetIniData.ApplyUpdates(0);
               next;
          end;
          {ProgForm.Text:='采集分机类货类认证台时:提交数据.';
          ProgForm.Value:=RZTS_QUERY.RecordCount-1;
          curapp.ProcessMessages;
          DataSetIniData.ApplyUpdates(0);  }
     end;

其中GUID为参数,通过调用系统函数取得GUID值,
通过观察这里是一个增长内存的点。

再就是EXECUTE是一个点,
麻烦帮忙看看。

以前问过这个问题,说后续版本解决,请问解决的怎么样了?
这是很严重的问题。我认为
回复

使用道具 举报

 楼主| 发表于 2007-4-22 12:43:54 | 显示全部楼层
在实际应用中,有很多情况需要我们自己写SQL语句提交数据库处理,目前平台提供的TQuery在每次执行Execute后都会占用一点内存不预释放,这样的如果程序运行时间长了后,就会占用很大的客户端内存,这应该是个很严重的问题,不知道思维加速为什么迟迟不予解决,也不给出相关说法。?
回复 支持 反对

使用道具 举报

发表于 2007-4-23 11:27:04 | 显示全部楼层
以前问过这个问题,说后续版本解决,请问解决的怎么样了?
我没印象有这样的问题,请把你原先跟帖子的连接告诉我们
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-23 12:12:30 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-23 14:56:51 | 显示全部楼层
UP
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 10:47:26 | 显示全部楼层
怎么没人回答啊?给个说法好不好?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 12:17:51 | 显示全部楼层
up
回复 支持 反对

使用道具 举报

发表于 2007-4-24 14:22:27 | 显示全部楼层
楼主,问题已经重现,正在查找原因。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-24 14:34:24 | 显示全部楼层
ok
回复 支持 反对

使用道具 举报

发表于 2007-4-24 18:15:41 | 显示全部楼层
楼主,请尝试换一下Insert的sql语句,不要使用参数

直接拼Insert的插入语句,看能否避免这个问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-8 05:36 , Processed in 0.041404 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表