Ich arbeite nun schon länger mit Delphi 2007 an einem recht umfangreichen Projekt. Seit ca. 4 Monaten habe ich allerdings extreme Arbeitsspeicher-Probleme auf den Anwender-Geräten.
Ich habe daraufhin einige Tests ausgeführt.
Formular1: Ein nacktes (automatisch erzeugtes) Formular mit einem TButton + Click Ereignis.
Formular2: Ein nacktes (verfügbares) Formular mit 3 Komponenten, IBDatabase, IBTransaction, IBTable.
Beim Create von Formular2 werden die Database, Transaction und Tabelle geöffnet. Beim Close wird alles wieder geschlossen.
Beim Click des Button's auf Formular 1 wird folgender Code ausgeführt:
procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin Form2 := TForm2.Create(Self); try Form2.Show; finally Form2.Release; end; end;
1.) Nach Programmstart läuft das Programm mit 800k im Arbeitsspeicher
2.) Nach dem ersten Klick werden 740k zusäzlich im Speicher belegt.
3.) Nach jedem weiteren nur noch zusätzliche 52k - 72k
Nun meine Frage:
Wenn ich das ganze eine Stunde lang mache, wird das Programm im Arbeitsspeicher ca. 25MB belegen. Warum wird durch die Zeile
Form2.Release
Im Internet findet man Anfragen von Leuten, bei denen das Problem auch auftritt, aber nie eine Lösung die wirklich funktioniert. Selbst wenn auf Form2 gar nichts passiert, nur ein leeres Formular, steigt der Speicher stetig an.
Bei meinem Hauptprogramm mit vielen Masken steigt der Speicher, trotz Freigabe, regelmäßig auf 300 - 800 MB an. Bei ca. 60 Usern pro Terminalserver sind das mal eben hochgerechnet 48GB an Speicherauslast. Da der Server das nicht liefert schmiert das Programm regelmäßig ab. Was nicht gerade zur Zufriedenheit des Users beiträgt.
Daher meine Hoffnung in diesem Forum jemanden zu finden, der darauf eine Lösung hat.
Grüße,
Michael Brotrück
Comment