![]() |
Garbage Collector dazu bringen ...
Wie kann ich den Garbage Collector dazu anhalten, den Speicher von Objekten freizugeben, auf die noch Zeiger verweisen ?
JA ich will es gerade so haben ! Oder ist dieser Herr Garbage Collector so vermessen und von sich eingenommen, dass er das nicht tut ? Danke |
Re: Garbage Collector dazu bringen ...
Solche Objekte sind ja kein Müll (Garbage). Warum gibts du die Objekte nicht selbst frei?
|
Re: Garbage Collector dazu bringen ...
Zitat:
Zitat:
|
Re: Garbage Collector dazu bringen ...
Auch wenn du's willst, ist das nicht wirklich sinnvoll. Du kannst natürlich einfach die Referenzen auf null (oder heißt das in Delphi.net nil?) setzen, bzw. wenn es sich wirklich um Zeiger handelt und nicht um Referenzen, dann jucken die den Garbage Collector herzlich wenig.
Der Garbage Collector muss schließlich garantieren, dass jede Referenz auf ein gültiges Objekt zeigt, und wenn du ihn trotzdem dazu bringen willst, diese Objekte freizugeben, musst du Zeiger anstelle von Referenzen verwenden. |
Re: Garbage Collector dazu bringen ...
Code:
Weil zum Beispiel viele Referenzen auf ein und dasselbe Object zeigen. Aber nicht auch GLEICZEITIG der Eigentümer dieses Objectes sind. Und diese Referenzen auch nicht die Entscheidungsgewalt haben, wie lange das Object existieren soll. Und es beim Freigeben dieses Objectes viel zu umständlich wäre, alle Objecte zu benachrichtigen. Weil auch aus OOP Sicht eine viel zu enge Kopplung zwischen diesen Objecten bestände.
Solche Objekte sind ja kein Müll (Garbage). Warum gibts du die Objekte nicht selbst frei?
Gezwungenermaßen programmieren aber die meisten dennoch so. Z.B. ein Fenster zeigt dem Nutzer etwas an. Ein ObjectB (anderes Fentser, Algorithmus oder sonst was) von ausserhalb, weist dieses Fenster an, etwas anzuzeigen. Der User schließt aber dieses Fenster. Nun müsste man normalerweise dieses ObjectB benachrichtigen, dass es eventuell seine Referenz darauf auf NIL setzt. Und das ist eben gerade der Quark, weil das Fenster gar nicht wissen soll, wer alles irgendwas anzeigt ! Jetzt taucht natürlich dass Problem auf, was ist, wenn ObjectB auf das Fenster zugreifen möchte. Und dazu gibt es bei mir das sogenannte "Addressbroker Pattern" - ich nenn es mal so. Das löst dieses Problem hier: ![]() auf wunderbare Weise.
Code:
Dann bist Du genauso vermessen.. :spin:
Es wäre doch totaler Käse, wenn er es amchen würde.
Code:
bei mir muss er das eben nicht. Deine Lösung mit normalen Pointern wäre äußerst umständlich. Jedesmal dereferenzieren ...
Der Garbage Collector muss schließlich garantieren, dass jede Referenz auf ein gültiges Objekt zeigt
Sorry für meinen Ton, hab eine ziemliche Wut auf den GC. Gibt es wirklich keine andere Möglichkeit ? . Komme leider erst am Montag an meinen Entwicklungsrechner, mit der D2005 Trial.
Code:
ob es geht, wenn man (umständlich) eine Referenz übergibt, die kurz in einen Pointer umwandelt und die Referenz in einer ANDEREN Variablen wieder speichern würde ? - überleg ..
und wenn du ihn trotzdem dazu bringen willst, diese Objekte freizugeben, musst du Zeiger anstelle von Referenzen verwenden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz