AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Prism Garbage Collector dazu bringen ...
Thema durchsuchen
Ansicht
Themen-Optionen

Garbage Collector dazu bringen ...

Ein Thema von stoxx · begonnen am 4. Dez 2004 · letzter Beitrag vom 4. Dez 2004
Antwort Antwort
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

Garbage Collector dazu bringen ...

  Alt 4. Dez 2004, 10:14
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
  Mit Zitat antworten Zitat
Benutzerbild von Mystic
Mystic

Registriert seit: 18. Okt 2003
Ort: Flerzheim
420 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Garbage Collector dazu bringen ...

  Alt 4. Dez 2004, 10:18
Solche Objekte sind ja kein Müll (Garbage). Warum gibts du die Objekte nicht selbst frei?
Jan Steffens
Der Fachwortgenerator - 100% Schwachsinn --- Der UPnP Router Manager - Kommentare erwünscht!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#3

Re: Garbage Collector dazu bringen ...

  Alt 4. Dez 2004, 10:27
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 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...
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: Garbage Collector dazu bringen ...

  Alt 4. Dez 2004, 11:02
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: Garbage Collector dazu bringen ...

  Alt 4. Dez 2004, 14:45
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..


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 ..
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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