BorZoFF
Зарегистрирован: 10.01.2006 Сообщения: 2
|
Добавлено: Вт Янв 10 2006 17:22 Заголовок сообщения: Утечка памяти в Delphi 7 |
|
|
Помогите пожалуйста
При отработке такого кода происходит утечка памяти.
Вызов идет в цикле.
Да и это происходит и с TQuery и с TADOQuery, аналогично
постепенно память используемая прогой растет до безобразия.
Да можно было бы создать один экземпляр класса
но эта функция вызывается из DLL, в этом есть необходимость,
поэтому экземпляр класса прходится создавать динамически.
(для примера)
function SaveLog(FileName,Event:string):Integer;
var Query:TQuery;
Count:Real;
begin
try
Query:=TQuery.Create(nil);
if not FileExists(FileName) then begin
Query.SQL.Text:= ' Create TABLE "'
+FileName+'"'+
' ('+
'NUMBER_ NUMERIC,'+
'DATE_ DATE, '+
'TIME_ CHAR(10), '+
'EVENT_ CHAR(254) '+
' )' ;
Query.ExecSQL; end;
Query.SQL.Text:='Select Number_ as Number from "'+FileName+'"';
Query.Active:=True;
if Query.RecordCount=0 then begin Count:=1; end else
begin
Query.Active:=False;
Query.SQL.Text:='Select MAX(Number_) as Result
from "'+FileName+'"';
Query.Active:=True;
Count:=Query.FieldByName('Result').AsFloat;
Count:=Count+1;
Query.Active:=False; end;
Query.SQL.Text:= 'INSERT INTO "'+FileName+'"'+
' ( NUMBER_,DATE_,TIME_, EVENT_) '+
'VALUES ( :NUMBER,:DATE,:TIME, :EVENT)';
Query.ParamByName('NUMBER').AsFloat := Count;
Query.ParamByName('DATE' ).AsDate := Date;
Query.ParamByName('TIME' ).AsString := TimeToStr(Time);
Query.ParamByName('EVENT').AsString := Event;
Query.ExecSQL;
Query.Active:=False;
Query.Free;
Result:=0;
except
Query.Active:=False;
Query.Free;
Result:=1;
end;
end;
[/b] |
|