Thema: Delphi Speicher läuft voll

Einzelnen Beitrag anzeigen

Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Speicher läuft voll

  Alt 9. Nov 2004, 11:54
Hi...

Ich habe ein Moster-Projekt am laufen, dass diverse Daten aus einer datenbank ausliest und dann spezifische Statistiken und andere Auswertungen ermöglicht. Weil von anfang an nicht ganz klar war in welche Richtung die Entwicklung geht habe ich folgendes gemacht: Ich habe die Datensätze in Form einer Tabelle aus einem dynamischen Array of Array of String aufgebaut. Zu diesem Array gehören diverse weitere dynamische Array of String, die darüber auskunft geben wie das Array interprätiert werden soll (steht eine Zahl drin, wieviele nachkommastellen, ist es eine ID (Personalnummer), die mit einem Text (Name der Person) verknüpft werden muss, bedingte Formatierung mit Farben bei Fall X, Y, Z... Soll die Spalte angezeigt werden, etc...).

Auf diese Weise komme ich zu einer stattlichen Ansammlung von dynamischen ein-, zwei- und dreidimensionalen Arrays. Die Arrays werden entweder dynamisch aus einer (mehreren) DLL-deladen oder aus der Datenbank selbst mittels einer TSQLQuerry gezogen.

Wenn ich nun Datensätze abfrage - Können schon mal um die 70.000 sein à ca 150Byte (plus die ganzen Referenz-Arrays), ist aber seltener - dann läuft der Speicher mit bis zu 150MB voll. Das ist eine Zahl, die ich aus dem Windows Task manager im Reiter Systemleistung gefunden habe. Programm gestartet, Speicherwert notiert, Abfrage abgesetzt, Speicher notiert, defferenz ermittelt.

Puh... Jetzt zu meiner Frage:
wenn ich derart große Abfragen starte sind es zwar eine Menge Daten, die da berechnet werden. Aber 150 MB erscheint mir doch ein 'etwas' zu hoher Wert. Wo könnte dieses Phänomen entstehen? Wie kann ich herausfinden was da den Speicher so aufbläht und an welcher Stelle es geschieht. machen es wirklich die Arrays oder läuft die Querry so voll? Kann das sein?

Dazu kommt, wenn ich nach so einer Hammer-Abfrage eine kleine (normale) absetze, bleibt der Speicherwert auf dieser zahl stehen - erst wenn ich das Programm beende wird er wieder freigegeben... Sagt diese Zahl im Systemleistungsfenster überhaupt etwas aus oder mach ich mich nur selbst verrückt?

Ausserdem kann es bei solchen Mords-Abfragen auch dazu kommen, dass das Programm einen "Fehler in Modul MeinProgramm.exe" ausgibt an Adresse sowiso (ihr wisst schon was ich meine) oder sich mit einer Illegal Pointer-Operation verabschiedet. Das muss direkt mit diesem phänomen zusammenhängen. bei normal dimensionierten Abfragen läuft der Code äusserst stabil...

Ich hoffe ich habe halbwegs rübergebracht was ich meine.

hoffe und warte...

MfG

Tonic
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat