Hallo,
ich habe eine größere Aktion, bei der drei Queries benötigt und diese in einer Schleife ca. 2000 mal ausgeführt werden, zunächst nach diesem Muster realisiert:
<pre>
q := TQuery.create(self);
try
q.sql.add(...
q.open;
...
finally
q.free;
end;
<pre>
Das Ganze wurde immer langsamer und nach Beendigung dauerte es ziemlich lange, bis sich das Fenster überhaupt schließen ließ.
Im Task-Manager (W2K) unter Systemleistung fiel mir auf, dass sich die Zahl der Handles laufend reduzierte.
Ich habe dann den Code geändert und eine Query im Formular erstellt, diese dann immer wieder geschlossen und geöffnet.
Das ging dann alles um Faktor 6 schneller, auch beim Schließen keine Probleme.
Ich dachte nun, das nach q.free die Sache doch sauber aus dem Speicher entfernt wird. Habe ich da was nicht berücksichtigt?
Dankbar für Hilfe ist...
Felix
ich habe eine größere Aktion, bei der drei Queries benötigt und diese in einer Schleife ca. 2000 mal ausgeführt werden, zunächst nach diesem Muster realisiert:
<pre>
q := TQuery.create(self);
try
q.sql.add(...
q.open;
...
finally
q.free;
end;
<pre>
Das Ganze wurde immer langsamer und nach Beendigung dauerte es ziemlich lange, bis sich das Fenster überhaupt schließen ließ.
Im Task-Manager (W2K) unter Systemleistung fiel mir auf, dass sich die Zahl der Handles laufend reduzierte.
Ich habe dann den Code geändert und eine Query im Formular erstellt, diese dann immer wieder geschlossen und geöffnet.
Das ging dann alles um Faktor 6 schneller, auch beim Schließen keine Probleme.
Ich dachte nun, das nach q.free die Sache doch sauber aus dem Speicher entfernt wird. Habe ich da was nicht berücksichtigt?
Dankbar für Hilfe ist...
Felix
Comment