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;