Aanbevolen, 2020

Editor'S Choice

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

Methoden dispose () en finalize () zijn de methoden van C # die worden aangeroepen om de onbeheerde bronnen die door een object worden bewaard, te bevrijden. De methode dispose () wordt gedefinieerd binnen de IDisisable van de interface, terwijl de methode finalize () binnen het klasseobject is gedefinieerd. Het belangrijkste verschil tussen dispose () en finalize () is dat de methode dispose () expliciet door de gebruiker moet worden aangeroepen, terwijl de methode finalize () wordt aangeroepen door de garbage collector, net voordat het object wordt vernietigd. Laten we een aantal andere verschillen tussen hen bestuderen met behulp van een onderstaande vergelijkingsgrafiek.

Vergelijkingstabel

Basis voor vergelijkingdispose ()afronden( )
GedefinieerdDe methode dispose () wordt gedefinieerd in de interface IDisposable interface.De methode finalize () id gedefinieerd in de klasse java.lang.object.
Syntaxisopenbare leegte Dispose () {
// Gooi hier code weg
}
protected void finalize () {
// afrondingscode hier
}
ingeroepenDe methode dispose () wordt aangeroepen door de gebruiker.De methode finalize () wordt aangeroepen door de garbage collector.
DoelMethode dispose () wordt gebruikt om onbeheerde bronnen te bevrijden wanneer deze wordt opgeroepen.Methode finalize () wordt gebruikt om onbeheerde bronnen te bevrijden 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 als openbaar verklaard.De methode finalize () is gedeclareerd als privé.
ActieDe methode dispose () is sneller en heeft onmiddellijk een object.De methode finalize is trager in vergelijking met dispose
PrestatieDe methode beschikt over () voert de onmiddellijke actie uit en heeft dus geen invloed op de prestaties van websites.De methode finalize () is trager en heeft invloed op de prestaties van de websites.

Definitie van dispose ()

Met de methode dispose () worden de niet-beheerde bronnen vrijgegeven die door een object van de klasse worden bewaard. De niet-beheerde bronnen zijn bestanden, gegevensverbindingen, enzovoort. De methode dispose () wordt gedeclareerd in de IDisposeable- interface en wordt door de klasse geïmplementeerd door de IDisposable-interface te implementeren. Deze methode wordt niet automatisch aangeroepen. De programmeur moet het handmatig implementeren wanneer u een aangepaste klasse maakt die door anderen wordt gebruikt. De methode heeft de volgende syntaxis:

 openbare nietige beschikking () {// verwijder hier code} 

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

Deze methode wordt handmatig aangeroepen door de code van een programma zoals het is geïmplementeerd om aan te roepen. De prestaties van de methode zijn snel en het maakt onmiddellijk de bronnen vrij die in het bezit zijn van het object van een klasse.

Definitie van finalize ()

De methode finalize () wordt gedefinieerd in de objectklasse . Het wordt gebruikt voor opruimactiviteiten. Deze methode wordt door de garbage collector aangeroepen wanneer de referentie van een object lange tijd niet wordt gebruikt. Garbage collector maakt de beheerde bronnen automatisch vrij, maar als u de niet-beheerde bronnen, zoals bestandsverwerking, gegevensverbinding, enzovoort, wilt bevrijden, moet de definitieve methode handmatig worden geïmplementeerd. De garbage collector roept de methode finalize () op net voordat het object volledig wordt vernietigd.

De syntaxis van de methode finalize ():

 protected void finalize () {// afrondingscode hier} 

In de bovenstaande syntaxis wordt de methode finalize () gedeclareerd als beveiligd. De reden hierachter is dat de methode finalize () niet toegankelijk moet zijn van buiten de klas en alleen toegankelijk moet zijn voor de garbage collector.

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

Belangrijkste verschillen tussen dispose () en finalize ()

  1. De methode dispose () is gedefinieerd als een IDisposable- interface. Anderzijds wordt de methode finalize () gedefinieerd in het klasse- object .
  2. De methode dispose () moet handmatig door de programmeur in de code worden opgeroepen, terwijl de methode finalize automatisch door de garbagecollector wordt aangeroepen voordat het object wordt vernietigd.
  3. De methode dispose kan op elk moment worden opgeroepen, terwijl de methode wordt gefinaliseerd door de garbage collector wanneer wordt vastgesteld dat er gedurende lange tijd niet naar dat object is gerefereerd.
  4. De methode dispose () wordt geïmplementeerd in een klasse nadat de IDisisable is geïmplementeerd. De methode finalize () moet alleen worden geïmplementeerd voor onbeheerde resources, omdat de beheerde resources automatisch worden vrijgegeven door de garbage collector.
  5. De toegangsspecificatie van de methode dispose () is openbaar omdat deze is gedefinieerd in de IDisisable van de interface en deze zou worden geïmplementeerd door de klasse die deze interface implementeert. Daarom moet deze openbaar zijn. Aan de andere kant heeft de methode finalize () een beschermde toegangsvermelding zodat deze niet toegankelijk is voor leden buiten de klas.
  6. De methode dispose () is snel en bevrijdt het object onmiddellijk, het heeft geen invloed op de prestatiekosten. De methode finalize () is langzamer en bevriest de bronnen die door het object worden vastgehouden, niet onmiddellijk.

Conclusie:

Er wordt voorgesteld methode dispose () te gebruiken voor de methode finalize () omdat deze sneller is dan voltooid. Het kan ook op elk gewenst moment worden opgeroepen.

Top