TBatchMove是否存在内存泄露?(200分)

  • 主题发起人 主题发起人 Blade
  • 开始时间 开始时间
B

Blade

Unregistered / Unconfirmed
GUEST, unregistred user!
需要为第三方程序从SQL Server中提取数据到Foxpro表中供使用。
使用Timer进行每分钟数据的刷新,数据导出使用TBatchMove,结果发现程序
内存占用越来越大,两三天后报虚拟内存不足。是不是TBatchMove存在内存泄漏问题?(用TBatchMove编了一个简单的小程序,也存在这样的情况,怀疑是
构件的问题)
procedure TForm1.TimerTimer(Sender: TObject);
begin
Try
with dbsSource do
Try
if not Connected then Connected := True;
Except
Exit;
end;

with qrySource do
begin
Close;
SQL.Clear;
SQL.Add('select * from Test');
Try
Open;
Except
Exit;
end;
end;

if tableDest.Active then tableDest.Close;
tableDest.TableName := 'test.dbf';
tableDest.TableType := ttFoxPro;

Try
BatchMove1.Execute;
Except
Exit;
end;

//关闭打开的数据集;
finally
tableDest.Close;
qrySource.Close;
dbsSource.Close;
end;
end;
 
那把qrySource换成TTable,用 TTable.BatchMove 方法如何?
 
tableDest.TableName := 'test.dbf';
tableDest.TableType := ttFoxPro;
用不着次次设置吧

源表作成 TTable 不用每次关,只要refresh一下吧
 
试试:

procedure TForm1.TimerTimer(Sender: TObject);
begin
Timer1.Enabled:=False; //沈前卫添加
Try
{...}
finally
tableDest.Close;
qrySource.Close;
dbsSource.Close;
Timer1.Enabled:=True; //沈前卫添加
end;
end;
 
前卫兄认为 timer里面有处理消息? 而且数据多到一分钟还做不完一次move吗?
 
了解..學懂了一些東西^^..thank you
 
呵呵,无效,恳请解答。
 
前卫兄有些道理,但我的怀疑是:
BDE出的事,我在开发中遇见过,在数据库多次连接断开,BDE就会产生内存垃圾。
BDE本来是针对桌面数据库的,不具有7*24小时的工作效能,MIDAS也存在这样的
问题,毕竟BORLAND不是数据库厂商。
如果推测有误,请指教。
 
我在执行BatchMove.Execute之前先将导出的文件手动地删除掉,这样内存占用情况
能够较好地解决,谁能给个解释,分就给谁了,呵呵。
Try
if FileExists("test.dbf") then
DeleteFile("test.dbf");
BatchMove.Execute;
except
Exit;
end;
 
要是这么说就是delphi 的 bug了
 
多人接受答案了。
 
后退
顶部