Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Freigabe von Objekten zeitaufwändig? (https://www.delphipraxis.net/153583-freigabe-von-objekten-zeitaufwaendig.html)

mjenke 9. Aug 2010 14:29

Freigabe von Objekten zeitaufwändig?
 
Hallo, alle miteinander!


Ich habe mal eine allgemeine Frage: Kann es sein, dass Objekte in Delphi wesentlich langsamer freigegeben als sie aufgebaut werden?

Ich frage aus folgendem Grund: In einer Anwendung, die mehrere hunderttausend-Objekte erzeugt, ist die Zeit, die für das Freigeben der Objekte verwendet wird, wesentlich (!!!!) höher als die Zeit, die benötigt wird, um sie aufzubauen. Die Verschachtelung der Objekte ist ziemlich diffizil, aber grundsätzlich ist es so, dass Objekte Unterobjekte besitzen, die wiederum n Unterobjekte besitzen etc. Die Verwaltung dieser Objekte ist baumähnlich.

Ich habe im Quelltext bereits alle Schrauben gedreht, die ich gefunden habe, um das Zerstören zu beschleunigen. Dennoch baut die Anwendung diese ganzen Objekte innerhalb weniger Minuten auf (3-4 Minuten), benötigt aber gut das 20fache an Zeit (70-80 Minuten), um sie wieder zu zerstören.

Handelt es sich dabei um ein allgemeines Phänomen, dass Speicherfreigabe kompliziertere Wege läuft, als Speicherallokation? Oder muss es doch an meinem Quellcode liegen?


Vielen Dank im Voraus!

Matthias

Bernhard Geyer 9. Aug 2010 14:34

AW: Freigabe von Objekten zeitaufwändig?
 
Mit oder Ohne Debug-Infos (Stichwort Speichercheck/FastMM)?
Genügend Speicher vorhanden (Auslagern von Programmspeicher durch Windows)?

himitsu 9. Aug 2010 14:41

AW: Freigabe von Objekten zeitaufwändig?
 
Womit werden die Unterobjekte verwaltet, bzw. wo werden deren Referenzen gespeichert?

mjenke 9. Aug 2010 15:35

AW: Freigabe von Objekten zeitaufwändig?
 
Hi, habe mal die Debug-Informationen ausgeschaltet, aber das ändert am Laufzeitverhaltn nichts.

@himitsu: Wie ist die Frage zu verstehen? Unterobjekte werden in einem Array Of TObject gespeichert.

Neutral General 9. Aug 2010 15:38

AW: Freigabe von Objekten zeitaufwändig?
 
Dein Programm braucht also 70-80 Minuten um sich zu beenden? :shock:

Dann kann da aber eigentlich irgendwas nicht stimmen... Eventuell solltest du dann deinen Code überdenken...

himitsu 9. Aug 2010 15:58

AW: Freigabe von Objekten zeitaufwändig?
 
OK, und wie werden dabei die Unterobjekte freigegeben?
Es wird doch nicht etwa jedes Objekt einzeln freigegeben, womöglich auch noch beginnend vom Anfang des Arrays und dann ständig jedes Objekt aus dem Array entfernt, die restlichen Einträge hochkopiert und dabei das Array stückchenweise verkleinert? :stupid:

Ohne zu wissen was dein Code macht, kann dir keiner helfen.

PS: bei meinem himXML hatte ich anfangs auch diesen Effekt, bis ich das Freigeben umgestellt hatte > alle Kind-Objekte im Destructor freigeben und dann das Array komplett löschen.

PSS: Warum nutzt du keine TObjektList?

taveuni 9. Aug 2010 16:01

AW: Freigabe von Objekten zeitaufwändig?
 
Zitat:

Zitat von mjenke (Beitrag 1040554)
@himitsu: Wie ist die Frage zu verstehen? Unterobjekte werden in einem Array Of TObject gespeichert.

Objekte in einer TObjectList würden Z.B. beim freigeben der Liste automatisch freigegeben.
Sind das visuelle Objekte?

Namenloser 9. Aug 2010 16:14

AW: Freigabe von Objekten zeitaufwändig?
 
Sind eventuell WideStrings in den Objekten? Ich habe die Erfahrung gemacht, dass das Freigeben von WideStrings ewig dauert.

Ansonsten: Ist ReportMemoryLeaksOnShutdown eingeschaltet? Wenn ja, schalte es mal aus, und schau, ob es dann schneller ist.

himitsu 9. Aug 2010 16:53

AW: Freigabe von Objekten zeitaufwändig?
 
ReportMemoryLeaksOnShutdown prüft nur am Ende des Programmes nach, ob noch was im Speichermanager liegt undzwar kurz vor Freigabe des Speichermanagers ... zu diesem Zeitpunkt wurden schon alle Objekte freigegeben (abgesehn von den Speicherleckt und diese würden dann auch angezeigt) ... dieses hat also keine Auswirkung zu diesem Zeitpunkt.

mjustin 9. Aug 2010 17:10

AW: Freigabe von Objekten zeitaufwändig?
 
Ja, wenn bei deren Freigabe Exceptions auftreten. Zwei Dinge würde ich testen:

a) gibt es Memory Leaks (-> das könnte auf Probleme beim eigentlich beabsichtigten Freigeben hinweisen)

b) wie werden Exceptions im Destruktor abgefangen, mit try except // nix end?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr.
Seite 1 von 3  1 23      

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