Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Runtime-Query an Designtime-Query binden ..Speicherproblem (https://www.delphipraxis.net/136930-runtime-query-designtime-query-binden-speicherproblem.html)

erich.wanker 10. Jul 2009 13:42

Datenbank: Firebird • Version: 2.1.0 • Zugriff über: ZEOS

Runtime-Query an Designtime-Query binden ..Speicherproblem
 
Hallo Leute,

Angenommen, ich hab in einem Datamodul zweit TZQuerys (TZQuery1 und TZQuery2)(real 100erte)

Zur Laufzeit erzeuge ich my_Query.TZQuery.create(das Modul)

ab und zu setze ich my_query:= TZQuery1 ODER my_query:=TZQuery2

somit arbeite ich die ganze Zeit mit my_query (super Performance in der Anwendung) .. aber nach div. Funktionen hab ich eine Speicherauslastung von über 1 GB durch mein Programm..



Hat jemand eine Idee - wie ich das umgehen kann ?

Danke

Erich

mkinzler 10. Jul 2009 13:46

Re: Runtime-Query an Designtime-Query binden ..Speicherprobl
 
Was machst du sonst mit my_Query? Weist du etwas zu oder verwendest du es nur als Referenz?

erich.wanker 10. Jul 2009 14:18

Re: Runtime-Query an Designtime-Query binden ..Speicherprobl
 
.. nachdem ich ein "bestehendes" TZQuery über my_Query anspreche, werden diverse Werte gelesen - Manche Werte geänder(edit) oder hinzugefügt(append) und mit Post bestätigt (autoCommit bei TZConnection =true)..

Es werden keine Änderungen am SQL-Statement oder so durchgeführt...

In einer Schleife mit "Case" teile ich dem "my_Query" mit, welches TZQuery es "verwenden" soll ..
danach lese und schreib ich über dieses eine "my_Query" die Werte .. anhand von diesen Werten wird beim nächsten Durchlauf die Case-Anweisung wieder anders abgearbeitet ...



Momentan vermute ich, das ein designtime-TZQuery nach abfeuern des SQL Statements das Ergebnis clientseitig in den Speicher legt - wenn ich nun mein my_Query auf des designtime-TZQuery lege, legt das my_Query das gleiche Datenbankabfrage-Ergebniss noch mal in den Speicher .. oder so :?:

mkinzler 10. Jul 2009 14:22

Re: Runtime-Query an Designtime-Query binden ..Speicherprobl
 
Dann brauchst du auch keine weitere Instanz erzeugen, sondern kannst direkt zuweisen, das
Delphi-Quellcode:
my_Query.TZQuery.create(das Modul);
ist daher unnötig und führt zu dem erhöhten Speicherverbrauch

Bernhard Geyer 10. Jul 2009 14:50

Re: Runtime-Query an Designtime-Query binden ..Speicherprobl
 
Zitat:

Zitat von erich.wanker
Momentan vermute ich, das ein designtime-TZQuery nach abfeuern des SQL Statements das Ergebnis clientseitig in den Speicher legt

Wenn du die Query nicht schließt/freigibst oder Forward-Only-Curser verwendest ist das As-Designed.

erich.wanker 14. Jul 2009 14:35

Re: Runtime-Query an Designtime-Query binden ..Speicherprobl
 
.. ich habs noch nicht geschafft :-( ...



Ich hab z.B.:

Delphi-Quellcode:
my_temp_Query1 :TZQuery

...
TZQuery1   - Select wert1,wert2 from Tabelle1 
TZQuery2   - Select wert1,wert2 from Tabelle2 
TZQuery3   - Select wert1,wert2 from Tabelle3 
TZQuery4   - Select wert1,wert2 from Tabelle4 
TZQuery5   - Select wert1,wert2 from Tabelle5 
TZQuery6   - Select wert1,wert2 from Tabelle6 
TZQuery7   - Select wert1,wert2 from Tabelle7 
...
und eine Schleife...

Delphi-Quellcode:
while not TZQuery1.EOF do
begin
  if wert1 = x1 then my_temp_Query1:=TZQuery1;
  if wert1 = x2 then my_temp_Query1:=TZQuery2;
  if wert1 = x3 then my_temp_Query1:=TZQuery3;
  if wert1 = x4 then my_temp_Query1:=TZQuery4;
  if wert1 = x5 then my_temp_Query1:=TZQuery5;
  if wert1 = x6 then my_temp_Query1:=TZQuery6;

  my_temp_Query1.append irgendwas...
  my_temp_Query1.post
  my_temp_Query1:=nil;

 TZQuery1.next;

end;

Wenn das so ausgeführt wird, steigt die Speicherauslastung extrem an und wird nicht mehr freigegeben..

ich hab my_temp_Query schon created .. nicht created.. Refresh'ed .. free gesetzt .. ect..



hat jemand eine idee ?

vielen Dank

Erich

[edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz