Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dyn. Arrays Speicherproblem (https://www.delphipraxis.net/25800-dyn-arrays-speicherproblem.html)

OrallY 12. Jul 2004 18:17


Dyn. Arrays Speicherproblem
 
In meinem Programm wird ein dynamischer Array ständig um ein Feld vergrößert. Das treibt aber dummerweise die Speicherbelastung derbe in die Höhe. Den Array von vornherein auf zum Beispiel 1000 festzulegen ist nicht möglich.

Mir würde es auch reichen, dass jedes mal, wenn die Länge des Array auf 0 gesetzt wird, auch der Speicher wieder Freigegeben wird. Nur kenne ich mich mit Speichermanagment praktisch nicht aus. Ich habs mal so probiert, aber irgendwie scheint das nicht zu funktionieren (was mich mit meinen Kenntnissen auch nicht sonderlich verwundert :wink:).

Delphi-Quellcode:
SetLength(DynArray, 0);
Finalize(DynArray);
FreeMem(MouseWay);
Da ich in dem Bereich ziemlich unbeleckt bin, wäre Konkretes für mich sehr hilfreich.

Chewie 12. Jul 2004 18:31

Re: Dyn. Arrays Speicherproblem
 
Delphi reserviert den Speicher ja in recht großen Blöcken von Windows. Solange aber noch Teile des Blockes in Benutzung sind, kann der Block nicht freigegeben werden.

Ich würde an deiner Stelle eher versuchen, das Array nicht schrittweise um 1 zu vergrößern, sondern das Array von vornerein großzügig zu dimensionieren. Solltest du dennoch an die Grenzen kommen, dann vergrößere das Array gleich um z.B. 20%. Du musst nur dran denken, einen eigenen Zähler für das zuletztbenutzte Element mitzuführen.

OrallY 12. Jul 2004 18:34

Re: Dyn. Arrays Speicherproblem
 
Gibt es da keine elegantere Lösung?

Chewie 12. Jul 2004 18:35

Re: Dyn. Arrays Speicherproblem
 
Keine dynamischen Arrays benutzen? Einen eigenen Speichermanager schreiben?
Ob das eleganter ist, sei mal dahingestellt.

OrallY 14. Jul 2004 15:52

Re: Dyn. Arrays Speicherproblem
 
Ist es nicht möglich, den Speicher wieder freizugeben, wenn die Daten des Arrays nicht mehr benutzt werden? Momentan wird, auch wenn ich den Array zwischenzeitlich auf 0 Felder kürze, trotzdem kein Speicher freigeben und beim nächsten Füllen neuer dazu beansprucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz