Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: ADOquery nimmt viel RAM-Speicher weg, hilfe!!!!!!!!!!

  Alt 28. Feb 2007, 10:05
*bump*

Also ich stehe im Moment vor genau dem gleichen Problem; leider hat hier bisher noch keiner eine Lösung gepostet.

trifid: PrimaryKey ist vorhanden. MDAC sind die neuesten. BDS2006.

Das TAdoQuery wird zur Laufzeit erzeugt und auch ordnungsgemäß wieder freigegeben.
Database_CreateQuery ist eine Prozedur, die mir ein TAdoQuery erzeugt, Prepared auf True setzt und Datenbank zuweist etc.
LogToFile speichert mir den Parameter in eine Datei + den kompletten, im System verfügbaren Arbeitsspeicher.
Man beachte, dass ich hier wirklich nur -zu Testzwecken- q.Open und dannach direkt q.Close aufrufe. Die Daten aus der Datenbank werden also nicht in irgendwelchen Arrays etc. gespeichert!

Delphi-Quellcode:
  if assigned(Database) then begin
    q := NIL;
    LogToFile('TThumblist.Reload.Database_CreateQuery');
    Database_CreateQuery(q, Database);
    try
      LogToFile('TThumblist.Reload.q.SQL.Add');
// q.SQL.Add('SELECT * FROM T_Storage_Thumbs ORDER BY strDescription');
      q.SQL.Add('SELECT TOP 10 * FROM T_Storage_Thumbs ORDER BY strDescription');
// q.SQL.Add('SELECT TOP 1 * FROM T_Termin');

      LogToFile('TThumblist.Reload.q.SQL.Open');
      q.Open;
      LogToFile('TThumblist.Reload.q.Close');
      q.Close;
      LogToFile('TThumblist.Reload.Ende');
    finally
      FreeAndNil(q);
      LogToFile('TThumblist.Reload.Free');
    end;
Ergebnisdatei des Logs:
Zitat:
09:58: TThumblist.Reload.Start [Ram: 502.275]
09:58: TThumblist.Reload.Database_CreateQuery [Ram: 502.275]
09:58: TThumblist.Reload.q.SQL.Add [Ram: 502.275]
09:58: TThumblist.Reload.q.SQL.Open [Ram: 502.284] // <-- nach dem Ausführen von Open fehlen hier 27 MB
09:58: TThumblist.Reload.q.SQL.First [Ram: 475.561]
09:58: TThumblist.Reload.q.Close [Ram: 475.561]
09:58: TThumblist.Reload.Ende [Ram: 489.940]
09:58: TThumblist.Reload.Free [Ram: 489.940] // <-- es fehlen immernoch knapp 12 MB
Das Interessante:
Das Problem scheint nur aufzutreten, sobald eine Tabelle mit Blob-Feldern verwendet wird. Die Fehler werden wohl alle geladen und nicht wieder entladen, denn wenn ich SELECT TOP x * FROM T_Storage_Thumbs ausführe, ist der "fehlende" Arbeitsspeicher immer ein vielfaches größer als x.

Bin für Tips sehr dankbar...

Siehe auch: http://coding.derkeiler.com/Archive/...3-11/0560.html
Auch das in der Borland QC Berichtete Problem mit angeblichem Fix bringt keine Lösung http://qc.borland.com/wc/qcmain.aspx?d=3635 (man muss angemeldet sein, um die Datei von QC herunterladen zu können)
  Mit Zitat antworten Zitat