Suositeltava, 2024

Toimituksen Valinta

Hävitä () ja viimeistely () C: ssä

Menetelmät, jotka hävitetään () ja viimeistellään (), ovat C # -menetelmiä, joihin vedetään esineen hallitsemattomien resurssien vapauttamiseksi. Hävitysmenetelmä () on määritelty rajapinnan IDisposable, kun taas menetelmä viimeistellään () määritellään luokan objektin sisällä. Pääasiallinen ero hävittämisen () ja viimeistelyn () välillä on, että käyttäjän on käytettävä nimenomaan menetelmää hävittämään (), kun taas menetelmä lopettaa () vie roskat kerääjälle juuri ennen kohteen tuhoutumista. Tutkitaan joitakin muita eroja niiden välillä alla olevan vertailukaavion avulla.

Vertailukaavio

Vertailun perusteethävitä ()viimeistele ()
määritellytMenetelmä () on määritelty rajapinnassa IDisposable interface.Javan.lang.object-luokassa määritelty menetelmä, joka viimeistelee () -määrityksen.
Syntaksipublic void Hävitä () {
// Hävitä koodi täällä
}
suojattu void viimeistely () {
// täällä oleva viimeistelykoodi
}
vedotaanKäyttäjä vetoaa menetelmän hävittämiseen ().Jätteenkerääjä vetoaa menetelmän viimeistelyyn ().
TarkoitusMenetelmän hävittäminen () käytetään hallitsemattomien resurssien vapauttamiseen aina, kun sitä käytetään.Menetelmän viimeistelyä () käytetään vapauttamaan hallitsemattomat resurssit ennen objektin tuhoutumista.
täytäntöönpanoMenetelmä () on toteutettava aina, kun on olemassa läheinen () menetelmä.Menetelmä viimeistellään () on tarkoitus toteuttaa hallitsemattomien resurssien osalta.
Access-määritysMenetelmä () on julistettu julkiseksi.Menetelmä viimeistellään () ilmoitetaan yksityiseksi.
ToimintaMenetelmä () on nopeampi ja hävittää välittömästi kohteen.Menetelmä viimeistellään hitaammin kuin hävittää
EsitysMenetelmä hävittää () hetkellisen toiminnan, joten se ei vaikuta sivustojen suorituskykyyn.Menetelmä viimeistellään (), koska se vaikuttaa hitaammin verkkosivustojen suorituskykyyn.

Määritelmä ()

Hävittäminen () -menetelmä vapauttaa hallitsemattomat resurssit, jotka kuuluvat luokan objektille. Hallitsemattomat resurssit ovat tiedostoja, datayhteyksiä jne. Menetelmä () on ilmoitettu käyttöliittymässä IDisposeable, ja luokka toteuttaa sen toteuttamalla IDisposable-rajapinnan. Tätä menetelmää ei kutsuta automaattisesti. Ohjelmoijan on toteutettava se manuaalisesti, kun luot luokkaan, jota muut käyttävät. Menetelmän syntaksi on seuraava:

 public void dispose () {// Hävitä koodi täällä} 

Edellä mainitussa syntaksissa voit havaita, että menetelmä on julistettu julkiseksi. Tämä johtuu siitä, että tämä menetelmä on määritelty rajapinnassa IDisposable ja se on toteutettava luokalla, joka toteuttaa tämän rajapinnan. Joten, jotta saavutetaan saavutettavuusluokka, menetelmä ilmoitetaan julkiseksi.

Tätä menetelmää kutsutaan manuaalisesti ohjelman koodilla, kun sitä toteutetaan vetoamaan. Menetelmien suorituskyky on nopea, ja se vapauttaa välittömästi luokan objektin hallussa olevat resurssit.

Viimeistelyn määritelmä ()

Viimeistelymenetelmä () määritellään objektiluokassa . Sitä käytetään puhdistustoimintaan. Tämä menetelmä kutsutaan roskien kerääjälle, kun esineen viittausta ei käytetä pitkään aikaan. Garbage kerääjä vapauttaa hallitut resurssit automaattisesti, mutta jos haluat vapauttaa hallitsemattomat resurssit, kuten tiedostojen käsittelemisen, datayhteyden jne., Viimeistelymenetelmä on toteutettava manuaalisesti. Jätekeräin vetoaa menetelmään viimeistelemään () juuri ennen kuin se tuhoaa kohteen kokonaan.

Menetelmän syntaksi viimeistellään ():

 suojattu void finalize () {// viimeistelykoodi täällä} 

Yllä olevassa syntaksissa menetelmä viimeistellään () ilmoitetaan suojatuksi. Syynä tähän on se, että menetelmä viimeistellään () ei saa olla luokkahuoneen ulkopuolella, ja sen on oltava vain roskienkerääjän käytettävissä.

Viimeistely () -menetelmä vaikuttaa suorituskyvyn kustannuksiin, koska se ei vapauta muistia välittömästi. C #: ssä viimeistelymenetelmää kutsutaan automaattisesti tuhoajilla.

Tärkeimmät erot hävittämisessä () ja viimeistelyssä ()

  1. Menetelmä, joka hävitetään (), on määritelty rajapinnassa, joka on mahdollista . Toisaalta menetelmä päättyy () on määritelty luokan objektissa .
  2. Menetelmän hävittäminen () on ohjelmoitavan käsin kutsuttava koodin sisäpuolelle, kun taas loppusijoittaja vetoaa lopulliseen menetelmään ennen kuin se tuhoaa kohteen.
  3. Menetelmää voidaan käyttää milloin tahansa, kun taas loppusijoittaja käyttää menetelmää viimeistelemään, kun se havaitsee, että kyseistä kohdetta ei ole viitattu pitkään aikaan.
  4. Menetelmä () on toteutettu luokassa sen jälkeen, kun käyttöliittymä on IDisposable. Menetelmä viimeistellään () on toteutettava vain hallitsemattomille resursseille, koska roskat kerääjä vapauttaa automaattisesti hallitut resurssit.
  5. Menetelmän pääsy-määrittäjä () on julkinen, koska se on määritelty käyttöliittymässä IDisposable, ja se toteutettaisiin luokalla, joka toteuttaa tämän rajapinnan, joten sen pitäisi olla julkinen. Toisaalta menetelmällä viimeistellään () on suojattu pääsymääritys, joten sen ei pitäisi olla kaikkien luokan ulkopuolisten jäsenten käytettävissä.
  6. Menetelmä () on nopea ja vapauttaa objektin välittömästi, joten se ei vaikuta suorituskykyyn. Menetelmä viimeistellään () on hitaampi eikä vapauta objektin hallussa olevia resursseja välittömästi.

johtopäätös:

On suositeltavaa käyttää menetelmää hävittää () menetelmän loppuun (), koska se on nopeampi kuin viimeistely. Sitä voidaan tarvittaessa kutsua milloin tahansa.

Top