Unterschied zwischen Entsorgung und Abschluss
- 4080
- 377
- Leonhard Lesch
In den Programmiersprachen kann ein Objekt während seiner Existenz nur eine Variable haben. Nach der Instanziierung kann es nicht geändert werden. Die gleiche Speicherzelle kann also nicht neuen Werten zugeordnet werden, daher ist eine Art automatisierter Speicherverwaltung erforderlich, um die nicht verwendeten Räume zu verwalten. Diese nicht verwendeten Räume werden als Müll bezeichnet und der gesamte Prozess der effizienten Speicherverwaltung wird als Garbage Collection bezeichnet.
Das Hauptziel eines Müllsammlers ist es, die toten Objekte von den lebenden Objekten zu trennen und den Raum für die Wiederverwendung zurückzugewinnen. Grundsätzlich funktioniert das Ganze auf dem Managed Heap, was nichts anderes als ein Speicherblock ist, und der Müllsammler überprüft regelmäßig den Heap -Speicher, um neuen Objekten Speicher zuzuweisen. Es gibt zwei Methoden, um nicht verwaltete Ressourcen wie Dateien und Datenbankverbindungen zu veröffentlichen: Entsorgen und Finalisieren.
Dieser Artikel hilft Ihnen, den Unterschied zwischen den beiden zu verstehen.
Was ist eine Veräußerungsmethode?
Dispose ist eine Standardmethode für Benutzer, um Objekten zu fordern, ihre Ressourcen freizugeben und nicht wieder auf die Objekte zuzugreifen. Die Entsendungsmethode bietet die Kontrolle der explizite Speicherung durch die Speicherung, indem die Objekte unbrauchbar machen.
Wenn die Benutzer die Methode von Dispose () anrufen, soll das Objekt alle teuren Ressourcen freilegen, wodurch sie zur Wiederverwendung verfügbar ist. Es wird nie vom Müllsammler gerufen, der nur zum Spielen kommt, wenn das Management knapp wird. Eine spezielle Schnittstelle namens "idisposable" wird verwendet, um zu entscheiden, wo und wie Sie Dispose () implementieren (). Aber was passiert, wenn die Entsendung nicht aufgerufen wird?
Was ist eine Abschlussmethode?
Wenn die Entsendung nicht aufgerufen wird, besteht der Fallback -Plan zur Verwendung von Finalize () zur Reinigung. Es wird vom Garbage Collector aufgerufen, um eine endgültige Ressourcenreinigung durchzuführen, bevor er den Speicher befreit. Das Konzept der rechtzeitigen Aufräumung wird hier nicht anwendbar, da das Objekt nicht zur Abschluss der Schlussfolgerung hinzugefügt wird, nur um später zu zerstören. Finalize ähnelt eher ein Schutz, der im Falle eines Programmierfehlers eingeführt wird, und die Entsendung säubert nicht die Ressourcen. In diesem Fall wird die Müllkollektor -Methode aufgerufen.
Unterschied zwischen Entsorgung und Abschluss
Grundlagen der Entsorgung und Finalisierung
Die Entsorgung der Methode ist auffordert. Die Entsendungsmethode wird aufgerufen, um Code auszuführen, das für die Reinigung des nicht verwendeten Speichers und die knappen Ressourcen wie die GDI -Handles erforderlich ist. In einfachen Worten bietet die Entsorgung der Methode die Kontrolle der expliziten Speicherreinigung. Abschlussmethode hingegen ist Teil der Müllsammlung, die zur Durchführung des endgültigen Aufräumvorgangs eines Objekts verwendet wird, bevor der Müll gesammelt wird. Einfach ausgedrückt, die Abschlussmethode wird zu freien nicht verwalteten Ressourcen aufgerufen, die von einem Objekt gehalten werden, bevor es zerstört wird.
Anrufen von Entsorgung und Finalisierung
Die Entsendung der Methode kann vom Benutzercode und der Klasse, die die Methode zur Entsendung von Ressourcen implementiert. Der Speicher kann jedoch nicht freigegeben werden, wenn der Müllsammler den Reinigungsprozess durchführt. Die Methode kann aufgerufen werden, auch wenn noch andere Verweise auf das Objekt existieren. Im Gegenteil die Abschlussmethode kann vom Garbage Collector erst dann aufgerufen werden. Nach der Ausführung der Abschlussmethode wird das Objekt aus dem Heap -Speicher entfernt.
Implementierung von Entsorgung und Finalisierung
Der Prozess der Entsorgung eines Objekts aus dem Speicher wird als Muster bezeichnet, das für Objekte verwendet werden kann, die auf nicht verwaltete Ressourcen zugreifen, da der Müllsammler nicht in der Lage ist, nicht verwaltete Ressourcen zurückzugewinnen. Die „idisposable“ Schnittstelle zusammen mit einer zusätzlichen Entsorgung (boolean) wird implementiert, in der die Veröffentlichung von nicht verwalteten Ressourcen gefragt wird. Eine Abschlussmethode wird ausgeführt, wenn ein Objekt vor seiner Deallokation zerstört wird. Es ist eine nicht deterministische Methode, die nach Ermessen des Müllsammlers auftritt und möglicherweise nicht einmal auftritt. Es sollte nicht auf extrem notwendig auf verwalteten Objekten implementiert werden.
Durchführung von Entsorgung und Finalisierung
Es ist viel schneller, eine Entsendung zu verwenden, anstatt für die sofortige Entsorgung von Objekten abzuschließen. Destruktoren werden automatisch konvertiert, um die Methode zur Laufzeit abzuschließen. Es wird vom Müllsammler automatisch aufgerufen, wenn das Objekt aus dem Zielfernrohr ausgeht, was normalerweise auftritt, wenn die Instanz dieses Objekts zerstört wird. Das Problem bei der Finalize-Methode ist, dass es nicht deterministisch ist, was bedeutet, dass es nicht sicher ist. Es kann jedoch nicht sofort den Speicher frei haben. In der Tat kann es nie aufgerufen werden und kann nicht explizit gezwungen werden.
Vs. Finalize: Vergleichstabelle
Zusammenfassung der Entsorgung von vs endgültig
Der Hauptunterschied zwischen der Entsendung und dem Abschluss von Methoden besteht darin, dass erstere eine deterministische Methode ist, die Objekte sofort entsetzt Speicherobjektinstanzen, wenn sie vor ihrer Deallokation aus dem Zielfernrohr gehen. Es ist immer ratsam, die Entsendungsmethode über die Finalisierung zu verwenden, sofern nicht äußerst erforderlich ist.
In anderer Hinsicht ist Finalize ein Schutz, der für die Reinigung von nicht verwalteten Ressourcen eingerichtet wird. Finalize -Methode wird vom Müllsammler aufgerufen, wenn ein Objekt aus dem Heap -Speicher geworfen wird.