Ero hävittämisen () ja viimeistelyn () välillä C #: ssä

Kirjoittaja: Laura McKinney
Luomispäivä: 2 Huhtikuu 2021
Päivityspäivä: 7 Saattaa 2024
Anonim
Ero hävittämisen () ja viimeistelyn () välillä C #: ssä - Tekniikka
Ero hävittämisen () ja viimeistelyn () välillä C #: ssä - Tekniikka

Sisältö


Menetelmät dispositio () ja viimeistely () ovat C # -menetelmiä, joihin vedotaan objektin hallitsemattomien resurssien vapauttamiseksi. Dispose () -menetelmä on määritelty käyttökelpoisen rajapinnan sisällä, kun taas menetelmä finalize () määritetään luokkaobjektin sisällä. Tärkein ero dispose (): n ja finalize (): n välillä on menetelmä hävitä() käyttäjän on nimenomaisesti vedottava menetelmään viimeistelyn () roskien kerääjä vetoaa juuri ennen esineen tuhoamista. Tutkitaan joitain muita eroja niiden välillä alla olevan vertailukaavion avulla.

  1. Vertailutaulukko
  2. Määritelmä
  3. Keskeiset erot
  4. johtopäätös

Vertailutaulukko

Vertailun perusteethävittää ()viimeistele ()
määritellytMenetelmä dispose () määritetään käyttöliittymässä, joka on kertakäyttöinen.Menetelmä viimeistelee () id, joka määritetään luokassa java.lang.object.
Syntaksipublic void hävitä () {
// Hävitä koodi tähän
}
suojattu tyhjä viimeistele () {
// viimeistelykoodi täällä
}
vedotaan Käyttäjä käyttää menetelmää dispose ().Jätekeräjä kutsuu menetelmän viimeistelemään ().
TarkoitusMenetelmää dispose () käytetään hallitsemattomien resurssien vapauttamiseen aina, kun se käynnistetään.Menetelmää finalize () käytetään hallitsemattomien resurssien vapauttamiseen ennen objektin tuhoamista.
ToteutusMenetelmä dispose () on toteutettava aina kun on olemassa close () -menetelmä.Menetelmä finalize () on tarkoitus ottaa käyttöön hallitsemattomille resursseille.
KäyttöoikeustiedotMenetelmä dispose () julistetaan julkiseksi.Menetelmä finalize () julistetaan yksityiseksi.
Toiminta Menetelmä dispose () on nopeampi ja hävittää objektin heti.Menetelmän viimeistely on hitaampaa kuin loppusijoituksen
EsitysMenetelmä disposed () suorittaa välittömän toiminnan, joten se ei vaikuta verkkosivustojen suorituskykyyn. Menetelmän viimeistely () hitaus vaikuttaa verkkosivustojen suorituskykyyn.


Määritelmä hävittää ()

Dispose () -menetelmä vapauttaa luokan objektin hallitsemattomat resurssit. Hallitsemattomat resurssit ovat tiedostoja, datayhteyksiä jne. Menetelmä dispose () ilmoitetaan käyttöliittymässä IDisposeable ja luokka toteuttaa sen toteuttamalla ID-kertakäyttöisen rajapinnan. Tätä menetelmää ei kutsuta automaattisesti. Ohjelmoijan on otettava se käyttöön manuaalisesti, kun luot mukaista luokkaa, jota muut käyttävät. Menetelmällä on seuraava syntaksi:

public void dispose () {// hävitä koodi täältä}

Yllä olevassa syntaksissa voit havaita, että menetelmä julistetaan julkiseksi. Tämä johtuu siitä, että tämä menetelmä on määritelty tunnistettavissa olevassa käyttöliittymässä, ja tämän käyttöliittymän toteuttavan luokan on toteutettava se. Joten saavutettavuuden saavuttamiseksi toteutusluokalle menetelmä julistetaan julkiseksi.


Tätä menetelmää kutsutaan manuaalisesti ohjelman koodilla, kun se toteutetaan käynnistämään. Menetelmien suorittaminen on nopeaa, ja se vapauttaa heti luokan kohteen hallussa olevat resurssit.

Määritelmä viimeistely ()

Viimeistely () -menetelmä on määritelty esine luokka. Sitä käytetään puhdistustoimenpiteisiin. Jätekeräjä kutsuu tätä menetelmää, kun esineen viittausta ei käytetä pitkään aikaan. Jätekeräjä vapauttaa hallitut resurssit automaattisesti, mutta jos haluat vapauttaa hallitsemattomat resurssit, kuten tiedostokahva, datayhteys jne., Viimeistelymenetelmä on otettava käyttöön manuaalisesti. Jätekeräjä kutsuu menetelmää viimeistelemään () juuri ennen sen tuhoamista kokonaan.

Menetelmän syntaksi viimeistellään ():

suojattu tyhjä viimeistely () {// viimeistelykoodi täällä}

Yllä olevassa syntaksissa menetelmä finalize () julistetaan suojatuksi. Syynä tähän on, että menetelmälle finalize () ei saa päästä luokan ulkopuolelta, ja sen on oltava vain jätteiden keräilijän käytettävissä.

Viimeistely () -menetelmä vaikuttaa suorituskyvyn kustannuksiin, koska se ei vapauta muistia heti. C #: ssa viimeistelymenetelmää kutsutaan automaattisesti destruktorien kanssa.

  1. Menetelmä dispose () määritetään käyttöliittymässä IDisposable. Toisaalta menetelmä finalize () määritetään luokassa esine.
  2. Ohjelmoijan on käytettävä menetelmän dispose () menetelmää manuaalisesti koodin sisällä, kun taas jätekeräjä kutsuu menetelmän loppuun automaattisesti ennen objektin tuhoamista.
  3. Menetelmään voidaan vedota milloin tahansa, kun taas jätekeräjä vetoaa menetelmän viimeistelyyn, kun se toteaa, että kyseiseen esineeseen ei ole viitattu pitkään aikaan.
  4. Menetelmä dispose () toteutetaan luokassa ID-kertakäyttöisen käyttöliittymän toteuttamisen jälkeen. Menetelmän viimeistely () on otettava käyttöön vain hallitsemattomat resurssit koska jätekeräjä vapauttaa hallitut resurssit automaattisesti.
  5. Menetelmän dispose () käyttöoikeusspesifikaattori on julkinen, koska se on määritelty tunnistettavissa olevassa rajapinnassa, ja sen toteuttaisi luokka, joka tämän rajapinnan toteuttaa, joten sen tulisi olla julkinen. Toisaalta menetelmällä finalize () on suojattu pääsymäärittelijä, jotta sen ei pitäisi olla kaikkien luokan ulkopuolisten jäsenten käytettävissä.
  6. Menetelmä dispose () on nopea ja vapauttaa esineen heti, joten se ei vaikuta suorituskustannuksiin. Menetelmän viimeistely () on hitaampaa eikä vapauta objektin hallussa olevia resursseja heti.

johtopäätös:

Menetelmää dispose () suositellaan käytettäväksi menetelmässä finalize (), koska se on nopeampi kuin viimeistely. Sitä voidaan myös kutsua milloin tahansa tarvittaessa.