Speicher von TStringGrid wieder freigeben
-
Hallo,
ich habe ein kurzes Testprogramm geschrieben:
SG->ColCount = 1000; SG->RowCount = 1000; for (int i = 0; i < SG->ColCount; i++) { for (int j = 0; j < SG->RowCount; j++) { SG->Cells[i][j] = "4"; } }Wobei SG ein TStringGrid ist.
Führe ich es aus, belegt mein Programm nach kurzer Zeit ca. 37 MB.Mit einem anderen Knopf will ich das Grud wieder löschen:
for (int i = 0; i < SG->ColCount; i++) { for (int j = 0; j < SG->RowCount; j++) { SG->Cells[i][j] = "\0"; } } SG->ColCount = 0; SG->RowCount = 0;Diese Funktion gibt mir zwar das Grid rein optisch wieder frei, allerdings bleibt der genutze Speicher komplett belegt!
Dies ändert sich auch nicht, wenn ich z.B. das Grid einfach lösche.delete SG; SG = NULL;Die Speichernutzung bleibt konstant bei ca. 37 MB. Auch ein Aufruf von CleanupInstance() bietet keine Linderung.
Dann habe ich das Grid in ein Frame gepackt, und das frame mit new neu erzeugt. Im Konstruktor und Destruktor des Frames steht oben geposteter Code. Erzeuge ich das Frame:
Frame2 = new TFrame2(this); Frame2->Top = 0; Frame2->Parent = this->Panel1; Frame2->Align = alClient; Frame2->Show();wird das Grid auch wie gehabt gefüllt. Nach dem Löschen via delete Frame2, bleibt das Problem das selbe. Das Programm belegt nach wie vor ca. 37 MB.

Ich finde das relativ unakzeptabel! Habt Ihr schon Erfahrungen auf dem Gebiet gemacht? Weiß jemand wie ich den Speicher eines Grids wieder freigeben kann?
*ratlos*
Clip
-
was passiert, wenn du für jede Spalte Clear() aufrufst?
-
Klappt Super, Danke!
Noch schneller geht:SG->Rows[j]->Text = "\0";