Karl Gorman
22
Januar
2021
Unterschied zwischen Finalize und Dispose Methoden

.NET Framework – Unterschied zwischen Finalize und Dispose Methoden

Ressourcenverwaltung und optimale Speicherzuweisung – dies sind sehr wichtige Aspekte beim Schreiben von effizientem Code im .NET Framework. Die richtige Ressourcesnfreisetzung ermöglicht die gewünschte Geschwindigkeit zu erzielen. Während .NET bei der Freigabe des verwalteten Speichers und der verwalteten Ressourcen ziemlich transparent ist, erfordert man von den .NET Entwicklern beim Umgehen mit den nicht verwalteten Ressourcen viel Fachwissen.

Das .NET Framework bietet zwei verschiedene Möglichkeiten, nicht verwaltete Ressourcen freizugeben: Finalise und Dispose. In diesem Artikel schauen wir uns beide Methoden genauer an, stellen die Unterschiede fest, und stellen heraus, wie die Verwendung dieser Methoden die Effizienz des Programms in .NET steigern kann. Wollen wir jetzt zur Sache kommen.

Wie wird Speicher in .NET verwaltet? – .NET Entwickler erklärt

Immer wenn Sie ein Objekt in .NET erstellen, wird der Speicher für dieses Objekt im verwalteten Heap zugewiesen. Wichtig ist, dass dieses Objekt im Heap verbleibt, solange es von einem aktiven Teil des Codes referenziert wird. Wenn keine Referenz mehr vorhanden ist, wird das Objekt in den Speicher „Müll“ verschoben.

Ab hier beginnt der Prozess der Speicherfreigabe, der durch den .NET Garbage Collector (GC) unterstützt wird. Immer wenn der Freigabeprozess vom Garbage Collector ausgeführt wird, wird die Finalize () Methode des Objekts automatisch aufgerufen. Um die dispose () -Methode aufzurufen, muss der .NET Entwickler sie jedoch reinprogrammieren.

promo image3
Auf der Suche nach einer neuen Herausforderung?

Interessante Projekte

Zuverlässige Arbeitgeber

Faire Vergütung

Finalize() und Dispose() Methoden – Überblick

Bis zu diesem Zeitpunkt sollen Sie schon verstanden haben, dass die Finalize () und Dispose () Methoden zur Objektereinigung im .NET Framework dienen. Beide Methoden können zum Freigeben verschiedener Arten von nicht verwalteten Ressourcen wie Dateien, Datenbankverbindungen, COM und mehr verwendet werden. Die beiden Methoden sind vollkommen unterschiedlich und einzigartig.

Was ist Finalize? – .NET Entwickler erklärt

Theoretisch ist die Finalize () Methode eine Methode in .NET, die den Abschließungsprozess umsetzt. Bei dieser Methode lässt der Garbage Collector Objekten, die nicht verwalteten Ressourcen zu löschen.

So funktioniert es – der Garbage Collector ruft die Finalizer aller Objekte auf, von denen er glaubt, dass sie nicht verwendet werden. Dies bedeutet, dass die Finalize Methode automatisch für die toten Objekte aufgerufen wird, bevor der von ihnen belegte Speicher zurückgefordert wird. Die Finalizer-Methode ist jedoch nicht vollständig zuverlässig, insbesondere bei verwalteten Ressourcen.

Hinweis – Es ist auch unmöglich die Finalize () Methode selbständig zu steuern. Die Methode wird von sich selbst aufgerufen, wenn Sie einen Destruktor für Class haben.

Was ist Dispose Methode? – .NET Entwickler erklärt

Dispose ist eine direkte Methode zur Freisetzung nicht verwalteter Ressourcen und im Vergleich zu finalize () ist viel zuverlässiger. Auch diese Methode kann nicht verwendet werden, um verwaltbaren Speicher freizugeben. Es kann jedoch zur effektiven Rückgewinnung der nicht verwalteten Ressourcen verwendet werden, für die das Objekt möglicherweise Referenzen enthält. Der größte Vorteil ist, dass die Dispose Methode eine deterministische Freigabe nicht verwalteter Ressourcen ermöglicht.

Bei der Dispose Methose () wird das Objekt jedoch nicht direkt aus dem Speicher entfernt. Stattdessen wird es aus dem Speicher entfernt, wenn der Garbage Collector frei ist. Um die Dispose-Methode umzusetzen, sollte man GC.SuppressFinalize (this) direkt aufrufen, damit die automatische Implementierung von finalizer () verhindert wird.
Gemeinsamkeiten zwischen Dispose () und Finalize ()

Die größte Gemeinsamkeit zwischen dispose () und finalize () besteht darin, dass beide Methoden verwendet werden können, um den Speicher freizugeben, der nicht verwalteten Ressourcen zugewiesen ist. Es gibt jedoch eine ganze Reihe von Unterschieden. Unten in dem Artikel vergleichen wir Dispose () und Finalize () in Detail.

Dispose()

  1. Die Dispose () -Methode wird hauptsächlich verwendet, um nicht verwaltete Ressourcen wie Dateien, Datenbanken und Streams freizugeben;
  2. Die Dispose-Methode wird verwendet, um nicht verwaltete Ressourcen nur dann freizugeben, wenn sie aufgerufen werden;
  3. Entwickler ruft selbständig die Dispose () -Methode direkt auf, indem er sie in die Code reinprogrammiert;
  4. Dispose() ist eine offene Methode;
  5. Die Dispose Methode wird schnell aufgerufen und umgesetzt.

Finalize()

  1. Die Finalize () Methode wird verwendet, um Reinigungsprozesse für nicht verwaltete Ressourcen durchzuführen, bevor das Objekt gelöscht wird;
  2. Die Finalize Methode wird verwendet, um nicht verwaltete Ressourcen dann freizugeben, wenn ein Objekt gelöscht wird;
  3. Die Finalize () Methode wird indirekt vom Garbage Collector und nicht vom Entwickler verwendet. Es geschieht automatisch;
  4. Finalize() ist eine geschützte Methode;
  5. Finalize() Methode wird langsam aufgerufen und umgesetzt.

Fazit

Dispose () und Finalize () sind zwei völlig unterschiedliche Methoden in .NET, und Dispose () bietet im Gegensatz zu Finalize () mehrere Vorteile. Es ist jedoch nicht so einfach, alle Funktionen der Dispose () -Methode zu betreiben! Dazu ist ein tiefes Verständnis des Konzepts und umfassende Erfahrung im .NET Framework erforderlich.

Möchten Sie die Methoden Dispose () und Finalize () in Ihrem nächsten Projekt implementieren? Kontaktieren Sie uns noch heute und lassen Sie es uns gemeinsam für Sie tun!