Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Prism Garbage Collector dazu bringen ... (https://www.delphipraxis.net/35232-garbage-collector-dazu-bringen.html)

stoxx 4. Dez 2004 09:14


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

Mystic 4. Dez 2004 09:18

Re: Garbage Collector dazu bringen ...
 
Solche Objekte sind ja kein Müll (Garbage). Warum gibts du die Objekte nicht selbst frei?

Robert_G 4. Dez 2004 09:27

Re: Garbage Collector dazu bringen ...
 
Zitat:

Zitat von stoxx
Oder ist dieser Herr Garbage Collector so vermessen und von sich eingenommen, dass er das nicht tut ?

Es wäre doch totaler Käse, wenn er es amchen würde.

Zitat:

Zitat von stoxx
JA ich will es gerade so haben !

Mir fällt einfach keine Situation ein, in der das Sinn machen würde. Weder in .Net noch in Delphi32... :gruebel:

OregonGhost 4. Dez 2004 10:02

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.

stoxx 4. Dez 2004 13:45

Re: Garbage Collector dazu bringen ...
 
Code:
Solche Objekte sind ja kein Müll (Garbage). Warum gibts du die Objekte nicht selbst frei?
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.
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: http://www.delphipraxis.net/internal...light=isobject
auf wunderbare Weise.


Code:
Es wäre doch totaler Käse, wenn er es amchen würde.
Dann bist Du genauso vermessen.. :spin:


Code:
Der Garbage Collector muss schließlich garantieren, dass jede Referenz auf ein gültiges Objekt zeigt
bei mir muss er das eben nicht. Deine Lösung mit normalen Pointern wäre äußerst umständlich. Jedesmal dereferenzieren ...
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:
und wenn du ihn trotzdem dazu bringen willst, diese Objekte freizugeben, musst du Zeiger anstelle von Referenzen verwenden.
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 ..


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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