AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Runtime-Query an Designtime-Query binden ..Speicherproblem
Thema durchsuchen
Ansicht
Themen-Optionen

Runtime-Query an Designtime-Query binden ..Speicherproblem

Ein Thema von erich.wanker · begonnen am 10. Jul 2009 · letzter Beitrag vom 14. Jul 2009
Antwort Antwort
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#1

Runtime-Query an Designtime-Query binden ..Speicherproblem

  Alt 10. Jul 2009, 13:42
Datenbank: Firebird • Version: 2.1.0 • Zugriff über: ZEOS
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
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 10. Jul 2009, 13:46
Was machst du sonst mit my_Query? Weist du etwas zu oder verwendest du es nur als Referenz?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#3

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

  Alt 10. Jul 2009, 14:18
.. 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
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 10. Jul 2009, 14:22
Dann brauchst du auch keine weitere Instanz erzeugen, sondern kannst direkt zuweisen, das
my_Query.TZQuery.create(das Modul); ist daher unnötig und führt zu dem erhöhten Speicherverbrauch
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 10. Jul 2009, 14:50
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
454 Beiträge
 
Delphi XE4 Professional
 
#6

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

  Alt 14. Jul 2009, 14:35
.. 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]
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz