Re: Richtige Zerstörung von eigenen Objekten
From: Peter Fleischer (peter.fleischer_nospam__at_gmx.de)
Date: 08/02/04
- Next message: Lars Hoppe: "Re: Richtige Zerstörung von eigenen Objekten"
- Previous message: Thomas Scheidegger [MVP]: "Re: Richtige Zerstörung von eigenen Objekten"
- In reply to: Stefan Leiber: "Re: Richtige Zerstörung von eigenen Objekten"
- Next in thread: Stefan Leiber: "Re: Richtige Zerstörung von eigenen Objekten"
- Reply: Stefan Leiber: "Re: Richtige Zerstörung von eigenen Objekten"
- Messages sorted by: [ date ] [ thread ]
Date: Mon, 2 Aug 2004 12:06:21 +0200
Stefan Leiber wrote:
...
> Also das heisst dann, wenn ich es richtig verstanden habe,
> das ich direkt keine Speicher freigeben kann.
Stefan,
was nutzt es dir, Speicher freizugeben? Das System ist da garantiert
optimaler organisiert, als dass du das in deiner Einzelanwendung
organisieren kannst, da du auf die Ressourcennutzung der anderen Prozesse
keinen Einfluss hat. Das System incl. GC entscheidet, wann es den Speicher
verdichten muss. Du kannst es nur bedingt für deine eigenen Prozesse
unterstützen.
> Bei C++ ist
> mir dies doch direkt möglich,
Was soll dieser Vergleich? In anderen System und Programmiersprachen gibt es
noch andere Techniken.
> hier wird diese Arbeit von
> dem Garbage Collector übernommen der in gewissen
> Zeitabständen die Klasseninstanzen prüft und dann gegebenen
> falls freigbt.
>
> Wenn ich jetzt aber in meiner Klasse eine
> Finalize-Methode() habe und diese nach der Verwendung des
> Objektes aufrufe, wird diese in der Garbage Collection
> vermekrt (Mit einem sogenannten HEAP?)
Die Finalize-Methode ist nicht für dich vorgesehen, sondern sollte dem GC
vorbehalten bleiben.
> und führt dazu das
> das der Speicher dieser Instanz schneller freigegeben wird,
> beeinträchtig aber wiederum die Leistung des Programmes.
Wenn auf deiner Festplatte 2 GB freier Platz sind, dein Programm 1 GB belegt
hatte und du viel CPU-Zeit benötigst, warum soll dann der GC arbeiten? Lass
doch das System entscheiden, wann es optimal ist. Eine schnellere Freigabe
bedeutet doch eine zusätzliche CPU-Belastung, die dein Programm ggf.
ausbremst.
> Wie müsste dann der Aufbau der Klasse sein, damit die
> Finalize-Methode aufgerufen und durchgefuehrt werden kann.
Prüfe in der Finalize-Methode, ob Dispose schon aufgerufen wurde und rufe
Dispose auf, falls es noch nicht aufgerufen wurde. Im Dispose rufst du vor
der Vernichtung der in der Klasse erzeugten weiteren Instanzen deren
Dispose-Methóden auf. Nach dem Aufruf von Dispose für die eingebettenen
Objekte vernichtest du alle Bezüge auf diese Objekte in dieser Klasse.
Diesen ganzen Aufwand kannst du dir aber sparen, wenn keine "unmamaned"
Ressourcen genutzt werden und keine allzu tiefe Verschachtelung der
Instanzierung vorliegt.
> In einem meiner Bücher "ASP.NET Developer´s Guide" steht
> drin, das es dafür schon Destruktoren zu Verfügung stehen,
> nämlich "Destruct". Kann ich diese dafür verwenden ? Oder
> ist dies wieder was ganz anderes und hat mit dieser Sache
> nichts am Hut :).
>
> Und was mir leider auch noch nicht ganz klar ist der
> Unterschied zw. Finalize und Dispose.
Das sind 2 verschiedene Methoden: Finalize gibt es immer, da vom
System.Object geerbt, Dispose kannst du selbst hinzufügen bei Bedarf.
> ich hoffe die jetzt nicht mit Fragen zu überschlagen, würde
> nur gerne das Grundprinzip der Objektzerstörung besser
> verstehen um zu wissen wie ich dies korrekt einsetze
Was hast zu meinem vorherigen Posting oder zu den umfangreichen Ausführungen
in der Hilfe denn nicht verstanden?
Peter
- Next message: Lars Hoppe: "Re: Richtige Zerstörung von eigenen Objekten"
- Previous message: Thomas Scheidegger [MVP]: "Re: Richtige Zerstörung von eigenen Objekten"
- In reply to: Stefan Leiber: "Re: Richtige Zerstörung von eigenen Objekten"
- Next in thread: Stefan Leiber: "Re: Richtige Zerstörung von eigenen Objekten"
- Reply: Stefan Leiber: "Re: Richtige Zerstörung von eigenen Objekten"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|