Ich studiere, wie Garbage Collector in c # funktioniert. Ich bin über die Verwendung von verwirrt Destructor
, Dispose
und Finalize
Methoden.
Nach meinen Recherchen und Erkenntnissen weist eine Destructor-Methode in meiner Klasse den Garbage Collector an, die Garbage Collection auf die in der Destructor-Methode angegebene Weise durchzuführen, die für die Instanzen der Klasse nicht explizit aufgerufen werden kann.
Die Dispose
Methode soll dem Benutzer die Möglichkeit geben, die Speicherbereinigung zu steuern. Die Finalize
Methode gibt die von der Klasse verwendeten Ressourcen frei, nicht jedoch das Objekt selbst.
Ich bin mir nicht sicher, ob ich es richtig verstehe. Bitte klären Sie die Zweifel. Weitere Links oder Anleitungen sind willkommen.
Collect()
Leistungsproblemen führen?In C # -Begriffen sind ein Destruktor und ein Finalizer grundsätzlich austauschbare Konzepte und sollten verwendet werden, um nicht verwaltete Ressourcen freizugeben , wenn ein Typ erfasst wird, z. B. externe Handles. Es ist sehr selten, dass Sie einen Finalizer schreiben müssen.
Das Problem dabei ist, dass GC nicht deterministisch ist, so dass die
Dispose()
Methode (viaIDisposable
) es ermöglicht, die deterministische Bereinigung zu unterstützen . Dies hat nichts mit der Speicherbereinigung zu tun und ermöglicht es dem Aufrufer, Ressourcen früher freizugeben . Es eignet sich auch für die Verwendung mit verwalteten Ressourcen (zusätzlich zu nicht verwalteten). Wenn Sie beispielsweise einen Typ haben, der eine Datenbankverbindung kapselt (z. B.), möchten Sie möglicherweise den Typ entsorgen, um die Verbindung ebenfalls freizugeben.quelle
Dispose()
, was vor der Zerstörung aufgerufen werden würde , aber das wird weder als Destruktor noch als