Einzelnen Beitrag anzeigen

idontknow

Registriert seit: 21. Apr 2008
Ort: Schleswig-Holstein
60 Beiträge
 
Delphi 11 Alexandria
 
#1

Speicherleck UIB + FB30

  Alt 20. Sep 2023, 13:54
Datenbank: Firebird • Version: 3.0.11 • Zugriff über: UIB
Moin,

hatte gerade ein übelst zu findendes Speicherleck in einer Anwendung. Die Ausgaben von FastMM4 sahen nicht nach einem Speicherleck aus, der Process Explorer und auch der Task-Manager waren anderer Meinung.
Konnte das ganze nun auf UIB in Verbindung mit Firebird 3.0 eingrenzen (mit Firebird 2.5 gibt es das Problem anscheinend nicht).

Habe jetzt erstmal einen Workaround gebaut, indem ich die Verbindung zur Datenbank die ganze Zeit geöffnet halte, somit ist das kein akutes Problem mehr.

Jeder Connect/Disconnect zur Datenbank belegt etwa 420 Bytes, was bei mir nach einiger Server-Laufzeit eine ordentliche Menge ergab...

Der Speicher wird offenbar in der DLL angefordert, somit ausserhalb der Zuständigkeit von FastMM4.

Kann das jemand bestätigen? Taucht das Problem nur mit UIB auf, oder auch mit anderen DB-Komponenten?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Database: TUIBDataBase;
  i: Integer;
begin
  Database := TUIBDataBase.Create;
  try
    Database.LibraryName := 'fbclient.dll';
    Database.DatabaseName:= 'localhost/3050:database.fdb';
    Database.UserName := 'SYSDBA';
    Database.PassWord := 'masterkey';
    DataBase.CharacterSet := csUTF8;

    sleep(5000);

    for i := 1 to 1000 do // dauert etwa 30s, führt zu etwa 420kb Leck (100000x -> Leck 42MB)
    begin
      DataBase.Connected := TRUE;
      Database.Connected := FALSE;
    end;

  finally
    Database.Free;
  end;
end;
Oliver
  Mit Zitat antworten Zitat