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