Verwendung des Destruktors in c #?

7

Ich bin etwas verwirrt über die Verwendung von Destruktor in c #. In meinem Wissen können wir nicht anrufen Destruktor nach meinem Wunsch wird es automatisch vor Garbage Collector für die Durchführung einiger Arbeiten über Klasse (Objekt) aufrufen, also möchte ich fragen, ob wir Destruktor in c # verwenden, dann müssen wir auf Garbage Collector. Wie ich weiß, dass Destruktor kann sich um Speicher kümmern, warum müssen wir Garbage Collector?

    
Nishant Kumar 06.09.2010, 04:47
quelle

6 Antworten

14

Jeder denkt über die falsche Garbage-Collection nach :

  

Ein korrekt geschriebenes Programm kann nicht   gehe davon aus, dass Finalizer jemals laufen werden.

    
Remus Rusanu 06.09.2010, 05:00
quelle
3

Ich denke, basierend auf Ihrem fast doppeltem Thema , das Sie nicht gut verstehen wie der Garbage Collector funktioniert. In sehr kurzer und stumpfer Weise ist es ein eigener Dienst, der im Hintergrund läuft und den Speicher für unbenutzte und entsorgte Objekte während der gesamten Lebensdauer Ihrer Anwendung verfolgt und freigibt. Realistisch gesehen sollten Sie nie den GC selbst anrufen, außer in sehr seltenen und speziellen Fällen.

Die Destruktoren werden zum Bereinigen und Freigeben von nicht verwalteten Ressourcen verwendet, die nicht vom Garbage Collector freigegeben werden können, siehe MSDN Seite für weitere Informationen über Destruktoren.

    
David Anderson - DCOM 06.09.2010 04:52
quelle
3

Es wäre auch nützlich, über den korrekten Weg zu lesen IDisposable Muster zu implementieren. Es gibt viel mehr als das, was wir denken -

Ссылка

    
Unmesh Kondolikar 06.09.2010 04:59
quelle
2

Der Destruktor dient nicht zum Bereinigen von verwaltetem Speicher. Dafür ist der Garbage Collector gedacht. Der Destruktor dient zum Bereinigen anderer Ressourcen wie z. B. Handles.

Ich empfehle, dass Sie sich CLR über C # für Details, wie das funktioniert.

    
Brian Rasmussen 06.09.2010 04:50
quelle
1

Ich denke, die Verwirrung rührt von der Tatsache her, dass Sie Objekte sowohl deterministisch als auch nicht-deterministisch entsorgen können (d. h. wenn der GC dazu kommt).

Um Ihre Fragen zu beantworten, warum wir überhaupt einen GC benötigen, würde ich sagen, sogar wenn Speicherlecks wegfallen, dass GCs ziemlich performant sind und eine Forderung nach sofortiger Speicherwiederherstellung tatsächlich die Gesamtleistung des Systems verringern könnte . Es ist ein ähnliches Argument für die Single-vs-Multi-Threading-Debatte.

    
CurtainDog 06.09.2010 05:08
quelle
0

Destruktoren in C # sollten sehr selten verwendet werden. In einigen Fällen haben Sie jedoch keine Wahl.

Wenn Sie zum Beispiel eine Singleton-Klasse für die Protokollierung haben und aus Gründen der Performanz nicht mit autoflush arbeiten können, sollte das Löschen eines Puffers während der Finalisierung des Singleton berücksichtigt werden.

    
Stanislav Basovník 31.01.2012 15:36
quelle

Tags und Links