Empfohlen, 2019

Tipp Der Redaktion

Unterschied zwischen dispose () und finalize () in C #

Die Methoden dispose () und finalize () sind die Methoden von C #, die aufgerufen werden, um die nicht verwalteten Ressourcen eines Objekts freizugeben. Die dispose () -Methode ist innerhalb der Schnittstelle IDisposable definiert, wohingegen die Methode finalize () innerhalb des Klassenobjekts definiert ist. Der Hauptunterschied zwischen dispose () und finalize () besteht darin, dass die Methode dispose () explizit vom Benutzer aufgerufen werden muss, während die Methode finalize () vom Garbage Collector aufgerufen wird, unmittelbar bevor das Objekt zerstört wird. Untersuchen wir einige andere Unterschiede anhand einer Vergleichstabelle, die unten gezeigt wird.

Vergleichstabelle

Vergleichsgrundlageentsorgen ()abschließen ()
DefiniertDie Methode dispose () wird in der Schnittstelle IDisposable definiert.Die Methode finalize (), die in der Klasse java.lang.object definiert ist.
Syntaxpublic void Dispose () {
// Code hier ablegen
}
geschützte void finalize () {
// Finalisierungscode hier
}
AufgerufenDie Methode dispose () wird vom Benutzer aufgerufen.Die Methode finalize () wird vom Garbage Collector aufgerufen.
ZweckDie Methode dispose () wird verwendet, um nicht verwaltete Ressourcen bei jedem Aufruf freizugeben.Die Methode finalize () wird verwendet, um nicht verwaltete Ressourcen freizugeben, bevor das Objekt zerstört wird.
ImplementierungDie Methode dispose () ist immer dann zu implementieren, wenn es eine close () -Methode gibt.Die Methode finalize () soll für nicht verwaltete Ressourcen implementiert werden.
ZugriffsbezeichnerDie Methode dispose () wird als public deklariert.Die Methode finalize () wird als privat deklariert.
AktionDie Methode dispose () ist schneller und entsorgt sofort ein Objekt.Das Finalisieren der Methode ist im Vergleich zum Entsorgen langsamer
PerformanceDie Methode disposes () führt die sofortige Aktion aus und beeinträchtigt daher nicht die Leistung von Websites.Da die Methode finalize () langsamer ist, wirkt sich dies auf die Leistung der Websites aus.

Definition von dispose ()

Die dispose () -Methode gibt die nicht verwalteten Ressourcen frei, die sich in einem Objekt der Klasse befinden. Die nicht verwalteten Ressourcen sind Dateien, Datenverbindungen usw. Die Methode dispose () wird in der Schnittstelle IDisposeable deklariert und von der Klasse implementiert, indem die Schnittstelle IDisposable implementiert wird. Diese Methode wird nicht automatisch aufgerufen. Der Programmierer muss sie manuell implementieren, wenn Sie eine benutzerdefinierte Klasse erstellen, die von anderen verwendet wird. Die Methode hat folgende Syntax:

 public void dispose () {// Code hier entsorgen} 

In der obigen Syntax können Sie beobachten, dass die Methode als public deklariert ist. Dies liegt daran, dass diese Methode in der Schnittstelle IDisposable definiert ist und von der Klasse implementiert werden muss, die diese Schnittstelle implementiert. Um Zugriff auf die implementierende Klasse zu gewähren, wird die Methode daher als public deklariert.

Diese Methode wird manuell durch den Code eines Programms aufgerufen, während es implementiert wird. Die Methodenleistung ist schnell und setzt die vom Objekt einer Klasse gehaltenen Ressourcen sofort frei.

Definition von finalize ()

Die Methode finalize () ist in der Objektklasse definiert. Es wird für Bereinigungsaktivitäten verwendet. Diese Methode wird vom Garbage Collector aufgerufen, wenn die Referenz eines Objekts längere Zeit nicht verwendet wird. Der Garbage Collector gibt die verwalteten Ressourcen automatisch frei. Wenn Sie jedoch die nicht verwalteten Ressourcen wie Dateihandle, Datenverbindung usw. freigeben möchten, muss die Finalize-Methode manuell implementiert werden. Der Garbage Collector ruft die Methode finalize () auf, kurz bevor das Objekt vollständig zerstört wird.

Die Syntax der Methode finalize ():

 Geschützter void finalize () {// Finalisierungscode hier} 

In der obigen Syntax wird die Methode finalize () als protected deklariert. Der Grund dafür ist, dass die Methode finalize () nicht von außerhalb der Klasse zugänglich sein darf und nur für den Garbage Collector zugänglich ist.

Die Methode finalize () beeinflusst die Kosten der Leistung, da der Speicher nicht sofort freigegeben wird. In C # wird die Finalize-Methode automatisch mit Destruktoren aufgerufen.

Hauptunterschiede zwischen dispose () und finalize ()

  1. Die Methode dispose () ist in einer Schnittstelle IDisposable definiert . Andererseits ist die Methode finalize () im Klassenobjekt definiert.
  2. Die Methode dispose () muss manuell im Code von einem Programmierer aufgerufen werden, während die Methode finalize automatisch vom Garbage Collector aufgerufen wird, bevor das Objekt zerstört wird.
  3. Die Methode dispose kann jederzeit aufgerufen werden, während die Methode finalize vom Garbage Collector aufgerufen wird, wenn festgestellt wird, dass auf dieses Objekt seit langem nicht mehr verwiesen wurde.
  4. Die Methode dispose () wird nach Implementierung der Schnittstelle IDisposable in einer Klasse implementiert. Die Methode finalize () muss nur für nicht verwaltete Ressourcen implementiert werden, da die verwalteten Ressourcen automatisch vom Garbage Collector freigegeben werden.
  5. Der Zugriffs-Spezifizierer der Methode dispose () ist public, da er in der Schnittstelle IDisposable definiert ist und von der Klasse implementiert wird, die diese Schnittstelle implementiert. Daher sollte sie öffentlich sein. Auf der anderen Seite hat die Methode finalize () den Zugriffsbezeichner geschützt, so dass sie keinem Mitglied außerhalb der Klasse zugänglich sein sollte.
  6. Die Methode dispose () ist schnell und gibt das Objekt sofort frei. Die Performance-Kosten werden dadurch nicht beeinflusst. Die Methode finalize () ist langsamer und gibt die vom Objekt gehaltenen Ressourcen nicht sofort frei.

Fazit:

Es wird empfohlen, die Methode dispose () über die Methode finalize () zu verwenden, da sie schneller als finalize ist. Es kann auch jederzeit aufgerufen werden, wenn dies erforderlich ist.

Top