在一个循环中通过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是一个点,
麻烦帮忙看看。
以前问过这个问题,说后续版本解决,请问解决的怎么样了?
这是很严重的问题。我认为 |