Du öffnest im Ablauf mehrere Querys. Im Quelltext kann ich aber keine entsprechende Anzahl von Close finden.
Vor der Freigabe der Querys würd' ich explizit ein Close aufrufen.
Delphi-Quellcode:
procedure TMxSQL.Get_Settings(
var Cols: TCols;
var Rows: TRows; Tabelle:
string; AStream: TStream);
var Logic: TLogic;
qry_Settings: TFDQuery;
begin
Logic:= TLogic.Create;
Logic.Set_Query_FDMngr(qry_Settings, '
BDHMySQL');
Try
qry_Settings.sql.Add('
select * from ' + Tabelle);
ExecQuery(qry_Settings, Cols, Rows);
//Hier wird die Query geöffnet und das Ergebnis in Arrays of string gespeichert
if Assigned(AStream)
then begin
qry_Settings.SaveToStream(AStream, sfJSON);
end;
qry_Settings.Close;
// Wird nicht mehr benötigt, daher zumachen.
Finally
qry_Settings.Free;
// Freigabe der Query, oder erfolgt die Freigabe
// automatisch in Logic.Free?
Logic.Free;
End;
end;
Wenn AStream zwingend erforderlich ist, kann man sich bei
if not Assigned(AStream)
die Routine sparen, daher würd' ich die Prüfung an den Anfang verschieben.
Delphi-Quellcode:
procedure TMxSQL.Get_Settings(
var Cols: TCols;
var Rows: TRows; Tabelle:
string; AStream: TStream);
var Logic: TLogic;
qry_Settings: TFDQuery;
begin
if not Assigned(AStream)
then exit;
// und passende Fehlermeldung ins Protokoll, sonst sucht man sich ggfls. 'nen Wolf nach 'nem vollkommen anderen Fehler im SQL, der zwar nicht existiert, aber durch den fehlenden Stream "übertünscht" wird.
Logic:= TLogic.Create;
Logic.Set_Query_FDMngr(qry_Settings, '
BDHMySQL');
Try
qry_Settings.sql.Add('
select * from ' + Tabelle);
ExecQuery(qry_Settings, Cols, Rows);
// Hier wird die Query geöffnet und das Ergebnis in Arrays of string gespeichert
qry_Settings.SaveToStream(AStream, sfJSON);
qry_Settings.Close;
// Wird nicht mehr benötigt, daher zumachen.
Finally
qry_Settings.Free;
// Freigabe der Query, oder erfolgt die Freigabe
// automatisch in Logic.Free?
Logic.Free;
End;
end;
Und ehrlich gesagt hab' ich keine Ahnung, ob es das geschielderte Ursprungsproblem löst, aber in Bezug auf
Zitat von
Ykcim:
Ich habe zwar im TaskManager beobachtet, dass ich einen Speicher irgendwo nicht freigegeben habe, denn der Speicher ist bei jeder Abfrage von der ServerApp um ca. 3MB gestiegen.
bin ich optimistisch.