Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Problem mit Speicher und Handle

  Alt 14. Mär 2008, 09:30
Hallo,

und zwar habe ich im Moment ein seltsames Problem und ich komme nicht ganz drauf, wieso. Ich habe eine Anwendung und eine passende objektorientierte Datenschicht. Ich greife auf eine Oracle-Datenbank (Version 9.x) mit AnyDAC zu und baue somit die Datenstruktur im Hintergrund auf. Diese kann ich natürlich immer wieder erneuern (=> refresh). Die Anzeige der Daten handhabe ich mit einem VirtualDrawTree (Virutal Treeview)).

Nun ist es so, dass ich nach mehrmaligem aktualisieren der Daten den folgenden Fehler erhalte:
Code:
Im Projekt panda.exe ist eine Exception der Klasse EOSError mit der Meldung 'Systemfehler. Code: 1158.
Der aktuelle Prozess verwendet alle Handles der zulässigen Höchstanzahl für Window Managerobjekte' aufgetreten.
Ich beobachte auch, dass meine Anwendung nach dem Start ca 36MB (!!!) für sich beansprucht. Der Verlauf weiterhin schaut dann wie folgt aus:
Aktualisierung
1. -> 36MB
2. -> 38MB
3. -> 46MB
4. -> 48MB
5. -> 59MB
x. -> 59MB

Ich weiß leider nich genau, wo der Speicher "abhanden" kommt bzw nicht mehr freigegeben wird. Es wäre auch ein wenig viel Quelltext die komplette Datenstruktur als Code hier zu präsentieren. Fakt ist aber, dass genau nach der Datenbankabfrage der Speicher immer und immer steigt, d.h. ich denke, dass es an AnyDAC liegt, wobei ich es eben nicht verstehe. So schaut mein Code aus. Der Speicher müsste doch wieder freigegeben werden und dürfte doch nicht mehr werden?!
Delphi-Quellcode:
// Beispielcode
sql := 'SELECT * FROM test_table';
table := TADDatSTable.Create();
try
  // gekapselte Methode aufrufen
  if (FDatabase.execSQL(sql, table) then
    // do something
  else
    // do nothing...
finally
  FreeAndNil(table);
end;
Ich hoffe ihr könnt mir hier weiterhelfen!

Mit freundlichen Grüßen
der Hai
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat