Verschil tussen dispose () en finalize () in C #

Schrijver: Laura McKinney
Datum Van Creatie: 2 April 2021
Updatedatum: 13 Kunnen 2024
Anonim
5. C to Assembly
Video: 5. C to Assembly

Inhoud


Methoden dispose () en finalize () zijn de methoden van C # die worden aangeroepen om de onbeheerde bronnen van een object vrij te maken. De methode dispose () is gedefinieerd in de interface IDisposable, terwijl de methode finalize () is gedefinieerd in het klasseobject. Het belangrijkste verschil tussen dispose () en finalize () is dat de methode dispose() moet expliciet worden ingeroepen door de gebruiker, terwijl de methode afronden() wordt aangeroepen door de vuilnisman, net voordat het object wordt vernietigd. Laten we enkele andere verschillen tussen hen bestuderen met behulp van een onderstaande vergelijkingstabel.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingverwijderen ()afronden( )
GedefinieerdDe methode dispose () is gedefinieerd in de interface IDisposable interface.De methode finalize () id gedefinieerd in de klasse java.lang.object.
Syntaxispublic void Dispose () {
// Gooi de code hier weg
}
beschermde nietig finalize () {
// voltooiingscode hier
}
aangeroepen De methode dispose () wordt door de gebruiker aangeroepen.De methode finalize () wordt aangeroepen door de vuilnisman.
DoelMethode dispose () wordt gebruikt om onbeheerde bronnen vrij te maken wanneer deze wordt aangeroepen.Methode finalize () wordt gebruikt om onbeheerde bronnen vrij te maken voordat het object wordt vernietigd.
ImplementatieDe methode dispose () moet worden geïmplementeerd wanneer er een methode close () is.De methode finalize () moet worden geïmplementeerd voor onbeheerde bronnen.
ToegangsspecificatieDe methode dispose () wordt openbaar gemaakt.De methode finalize () wordt als privé gedeclareerd.
Actie De methode dispose () is sneller en beschikt direct over een object.De methode finalize is langzamer in vergelijking met weggooien
PrestatieDe methode dispose () voert de onmiddellijke actie uit en heeft dus geen invloed op de prestaties van websites. De methode finalize () is langzamer van invloed op de prestaties van de websites.


Definitie van verwijdering ()

De methode dispose () geeft de onbeheerde bronnen vrij die in het bezit zijn van een object van de klasse. De onbeheerde bronnen zijn bestanden, gegevensverbindingen, enz. De methode dispose () wordt in de interface aangegeven IDisposeable en het wordt geïmplementeerd door de klasse door de interface IDisposable te implementeren. Deze methode wordt niet automatisch aangeroepen. Het programmeerapparaat moet dit handmatig implementeren wanneer u een aangepaste klasse maakt die door anderen wordt gebruikt. De methode heeft de volgende syntaxis:

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

In de bovenstaande syntaxis kunt u zien dat de methode als openbaar wordt verklaard. Dit komt omdat deze methode is gedefinieerd in de interface IDisposable en moet worden geïmplementeerd door de klasse die deze interface implementeert. Dus, om de implementatieklasse toegankelijk te maken, wordt de methode als openbaar verklaard.


Deze methode wordt handmatig aangeroepen door de code van een programma wanneer deze wordt geïmplementeerd om op te roepen. De prestaties van de methode zijn snel en het maakt onmiddellijk de middelen vrij die het object van een klasse bevat.

Definitie van finalize ()

De methode finalize () is gedefinieerd in de voorwerp klasse. Het wordt gebruikt voor opruimactiviteiten. Deze methode wordt door de vuilnisman genoemd wanneer de referentie van een object lange tijd niet wordt gebruikt. Garbage collector maakt de beheerde bronnen automatisch vrij, maar als u de onbeheerde bronnen zoals bestandsingang, gegevensverbinding, enz. Wilt bevrijden, moet de finalize-methode handmatig worden geïmplementeerd. De garbage collector roept de methode finalize () aan net voordat het het object volledig vernietigt.

De syntaxis van de methode finalize ():

beschermde nietige finalize () {// finalisatiecode hier}

In de bovenstaande syntaxis wordt de methode finalize () als beveiligd verklaard. De reden hiervoor is dat de methode finalize () niet toegankelijk moet zijn van buiten de klasse en alleen toegankelijk moet zijn voor de vuilnisman.

De methode finalize () is van invloed op de kosten van de uitvoering omdat het geheugen niet onmiddellijk wordt vrijgemaakt. In C # wordt de laatste methode automatisch aangeroepen met destructors.

  1. De methode dispose () is gedefinieerd in een interface IDisposable. Aan de andere kant is de methode finalize () gedefinieerd in de klasse voorwerp.
  2. De methode dispose () moet handmatig in de code worden aangeroepen door een programmeur, terwijl de methode finalize automatisch wordt aangeroepen door de vuilnisman voordat het object wordt vernietigd.
  3. De methode wegdoen kan op elk moment worden ingeroepen, terwijl de methode finalize wordt aangeroepen door de vuilnisman wanneer deze vindt dat er lange tijd niet naar dat object is verwezen.
  4. De methode dispose () wordt geïmplementeerd in een klasse na implementatie van de interface IDisposable. De methode finalize () hoeft alleen te worden geïmplementeerd voor onbeheerde bronnen omdat de beheerde bronnen automatisch worden vrijgegeven door de vuilnisman.
  5. De toegangsspecificatie van de methode dispose () is openbaar omdat deze is gedefinieerd in de interface IDisposable en deze zou worden geïmplementeerd door de klasse die deze interface implementeert, dus deze moet openbaar zijn. Aan de andere kant heeft de methode finalize () een beveiligde toegangsspecificatie zodat deze niet toegankelijk is voor leden buiten de klasse.
  6. De methode dispose () is snel en maakt het object onmiddellijk vrij, vandaar dat het geen invloed heeft op de prestatiekosten. De methode finalize () is langzamer en maakt de bronnen van het object niet onmiddellijk vrij.

Gevolgtrekking:

Er wordt voorgesteld om methode dispose () te gebruiken boven de methode finalize () omdat deze sneller is dan finalize. Het kan ook op elk moment worden opgeroepen wanneer dat nodig is.