procedure TMainForm.Button1Click(Sender: TObject);
var
ADOCjcx:TADOQuery;
begin
ADOCjcx:=TADOQuery.Create(self);
ADOCjcx.Connection:=myDataMd.ADOConnection1;
ADOCjcx.SQL.Add('select * from tbA');
ADOCjcx.Open;
end;
Button1Click在程序中会多次点击,每次都为ADOCjcx分配内存,实际造成了内存泄漏。
可以这样做防止内存泄漏:
var
ADOCjcx:TADOQuery;
procedure TMainForm.Button1Click(Sender: TObject);
begin
FreeAndNil(ADOCjcx);
ADOCjcx:=TADOQuery.Create(self);
ADOCjcx.Connection:=myDataMd.ADOConnection1;
ADOCjcx.SQL.Add('select * from tbA');
ADOCjcx.Open;
end;
var
ADOCjcx:TADOQuery;
begin
ADOCjcx:=TADOQuery.Create(self);
ADOCjcx.Connection:=myDataMd.ADOConnection1;
ADOCjcx.SQL.Add('select * from tbA');
ADOCjcx.Open;
end;
Button1Click在程序中会多次点击,每次都为ADOCjcx分配内存,实际造成了内存泄漏。
可以这样做防止内存泄漏:
var
ADOCjcx:TADOQuery;
procedure TMainForm.Button1Click(Sender: TObject);
begin
FreeAndNil(ADOCjcx);
ADOCjcx:=TADOQuery.Create(self);
ADOCjcx.Connection:=myDataMd.ADOConnection1;
ADOCjcx.SQL.Add('select * from tbA');
ADOCjcx.Open;
end;
频繁地随用随删也会造成一些内存碎片,不过程序一般在客户端,也没人讲究这些!
我一般都是把ADOQUERY池化,用完之后放到资源池中
.
.
.
private
ADOCjcx:TADOQuery;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
if Assigned(ADOCjcx) then
FreeAndNil(ADOCjcx);
ADOCjcx := TADOQuery.Create(Self);
ADOCjcx.Connection := myDataMd.ADOConnection1;
ADOCjcx.SQL.Add('select * from tbA');
ADOCjcx.Open;
end;
要怎样做呢?
ado:= TAdoQuery.Create(nil)
try
.....
finally
FreeAndNil(Ado);
end;
你可以换成指定connectstring=myDataMd.ADOConnection1.connectstring试试