Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: ADOquery nimmt viel RAM-Speicher weg, hilfe!!!!!!!!!!

  Alt 28. Feb 2007, 10:45
In einer Newsgroup ( http://groups.google.ru/group/borlan...796b7e06282e87 ) bin ich auf das folgende Problem gestoßen:

Interessant dabei ist, dass das, was hier hier, als Bugfix für Delphi7 herausgegeben wurde. Komischerweise stand es in meiner AdoDB von BDS2006 wieder genauso drinnen (also erst inherited Destroy, dann die anderen Befehle).

Delphi-Quellcode:
destructor TADOCommand.Destroy;
begin
// we modified like this ==>
  Connection := nil;
  FCommandObject := nil;
  FreeAndNil(FParameters);
// we modified : end

  inherited Destroy;

{ // this is the original source code
Connection := nil;
  FCommandObject := nil;
  FreeAndNil(FParameters);}

end;

destructor TADOQuery.Destroy;
begin
// we modified like this ==>
  FreeAndNil(FSQL);
// we modified : end

  inherited Destroy;
// FreeAndNil(FSQL); // original source code
end;

Der Effekt lässt sich übrigens auch mit einer TAdoTable nachstellen:
Delphi-Quellcode:
  LogToFile('TThumblist.Reload.Start');
  if assigned(Database) then begin
    try
      at := TADOTable.Create(NIL);
      at.Connection := Database;
      at.TableName := 'T_Storage_Thumbs';
      at.CursorType := ctOpenForwardOnly;
      LogToFile('TThumblist.Reload.at.Open');
      at.Open;
      LogToFile('TThumblist.Reload.at.First');
      at.First;

      LogToFile('TThumblist.Reload.at.Close');
      at.Close;
    finally
      FreeAndNil(at);
    end;
  end;
  LogToFile('TThumblist.Reload.Ende');
Zitat:
10:49: TThumblist.Reload.Start [Ram: 488.891]
10:49: TThumblist.Reload.at.Open [Ram: 488.891]
10:49: TThumblist.Reload.at.First [Ram: 461.158]
10:49: TThumblist.Reload.at.Close [Ram: 461.158]
10:49: TThumblist.Reload.Ende [Ram: 475.536] // <-- hier fehlen auch 13 MB Ram
  Mit Zitat antworten Zitat