Einzelnen Beitrag anzeigen

markusef

Registriert seit: 9. Mai 2016
15 Beiträge
 
Delphi 10 Seattle Professional
 
#1

ADO Memoryleak / Speicherleck ?!

  Alt 29. Nov 2017, 12:19
Hey,

ich habe eine Client/Server-Serviceanwendung programmiert und soweit funktioniert auch alles. Bis auf einen einzigen Punkt.
Und zwar sobald eine Datenbank Verbindung innerhalb eines Threads ins Spiel kommt steigt mein Arbeitsspeicherverbrauch der .exe mit jeder Anfrage.
Ich habe es schon soweit dezimiert das lediglich eine ADOConnection instanziiert wird, ein ConnectionString übergeben wird, danach die Verbindung geöffnet und anschließend (ohne ein SQL Command auszuführen !) wieder geschlossen & ge-FreeAndNil't wird. Dennoch steigt der Arbeitsspeicherverbrauch mit jedem Durchlauf dieses Vorganges.

Ich weis so langsam nicht mehr wie ich das Unterbinden kann.
Leider bin ich auch auf die ADO-Geschichte angewiesen da wir eine ältere SAP-MaxDb Datenbank benutzen (müssen).
Quellcode:

Connect Funktion:
Code:
function TdatabaseInfo.Connect : boolean;
begin
  try
    if fConnectionString <> '' then
    begin
      ADOConnection.ConnectionString := fConnectionString; // Übergibt Connection String
    end
    else
    begin
      Result := false;
      nxLogging.Logger.error('TdatabaseInfo.Connect', 'connection string empty');
      Exit;
    end;

    ADOConnection.Open;

    if ADOConnection.Connected then
    begin
      Result := true;
    end;
  except
    on e : exception do
    begin
      Result := false;
      nxLogging.Logger.error('TdatabaseInfo.Connect', 'error during ADO connect: ' + E.Message);
    end;
  end;
end;
Disconnect Funktion:
Code:
function TdatabaseInfo.Disconnect : boolean;
begin
  try
    ADOConnection.Close;
    ADOConnection.Connected := false;
  finally
    Result := true;
  end;
end;
Ist jetzt nicht schön und auch nur fix "zusammengehackt", aber läuft, bis auf das Memoryleak.

Jemand ne Ahnung woran das liegt oder wie sich das Unterbinden lässt ?

Beste Grüße
Markus
  Mit Zitat antworten Zitat