Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Koponenten TRealList (TSingleList) und TIntegerList gesucht (https://www.delphipraxis.net/101719-koponenten-treallist-tsinglelist-und-tintegerlist-gesucht.html)

3_of_8 18. Okt 2007 18:54

Re: Koponenten TRealList (TSingleList) und TIntegerList gesu
 
Falls man Delphi 2007 hat, ist eventuell auch die Lösung mit Generics sinnvoll. (Und elegant)

mkinzler 18. Okt 2007 18:58

Re: Koponenten TRealList (TSingleList) und TIntegerList gesu
 
Aber nicht unter Win32

oki 18. Okt 2007 19:15

Re: Koponenten TRealList (TSingleList) und TIntegerList gesu
 
Zitat:

Zitat von user69
Arrays: Da ich anfangs nicht weiß, wie viele Element im Array sin brauche ich schon Dynamische Arrays. Diese haben für mich den Nachteil, daß sie schnell viel Speicher verbrauchen können(Hab ich mich früher auch manchmal drüber gewundert), wenn man sie manuell z.B. immer um 1 vergrößert (es wird ja immer wieder der komplette Speicher neu zugewiesen). Den anderen Speicher hält Delphis Memory Manager (er denk man könnte ihn ja nochmal brauchen) einfach vor und gibt ihn nicht wieder frei.

Das ist mir aber neu. Die OH sagt da aber was anderes.
Grundsätzlich benutze ich aber auch lieber Listen.

Gruß oki

user69 18. Okt 2007 21:11

Re: Koponenten TRealList (TSingleList) und TIntegerList gesu
 
Was sagt die Hilfe denn?

Zum Memory Manager gibt es da keine solche Aussage denke ich, oder doch.
Das Array an sich gibt den Speicher schon wieder frei, nur dem Memory Manager hält ihn, damit er für spätere Anforderungen schneller ist (oft hilft das zwar, aber bei sowas halt nich). Außerdem nimmt er sich immer bei Vergrößerung eines Arrays neuen Speicherplatz mit der kompletten neuen Größe.

Ich bin, wie gesagt da auch Anfangs mit meiner Anwendung reingefallen, da ich ein Dynamisches Array (von einem eigenen Type, der schon ein paar Byte bracht) genutzt habe und es immer um eins größer oder kleiner gemacht habe. Das führte irgendwann mal zu der Windows Meldung, daß nicht genug Speicher da ist (er meint wohl Heap, da allgeien noch weit mehr als genug Speicher frei war). Alleine das Umschreiben des Codes (num vergößere ich das Array immer um 1000, egal ob ichs brauch oder nicht) brachte Erfolge und keine solchen Fehlermeldungen mehr. Nachteil: ich muß die wirkliche Größe in einer separaten Variable mitführen und immer checken, wann ich das Array vergrößern muß. Deshalb hier der Ansatz einer Koponenten die beide diese Fälle löst, also die TList.

Ich habe übrigens lange im Netz gesucht, um dem Phänomen auf die Spur zu kommen. Bin aber dann doch im Netz fündig geworden, weiß aber nicht mehr wo.

3_of_8 18. Okt 2007 21:16

Re: Koponenten TRealList (TSingleList) und TIntegerList gesu
 
Was? :shock:

Der Delphi-Memory-Manager defragmentiert seinen Speicher nicht? Das wäre mir jetzt sehr neu.

cruiser 18. Okt 2007 21:21

Re: Koponenten TRealList (TSingleList) und TIntegerList gesu
 
Zitat:

Zitat von user69
Nachteil: ich muß die wirkliche Größe in einer separaten Variable mitführen und immer checken, wann ich das Array vergrößern muß.

Nichts anderes macht TList.. einfach mal die Grow-Methode anschaun. Mit einer eigenen Grow-Methode kann man das evtl. noch optimieren... allerdings ist der Grow bereits ganz gut gelöst.

ich würde die TList aber wrappen und nicht ableiten... bei einer Ableitung kann man immer noch auf TList casten und falsche Pointer reingeben. Gewrappt kann man nur das benutzen, was da ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr.
Seite 2 von 2     12   

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