Preporučeno, 2019

Izbor Urednika

Razlika između dispos () i finaliziranja () u C #

Metode dispos () i finalize () su metode C # koje se pozivaju da oslobode neupravljane resurse koje drži objekt. Metoda dispose () definirana je unutar IDisposable sučelja, dok je metoda finalize () definirana unutar objekta klase. Glavna razlika između dispos () i finalize () je u tome što korisnik dispose () mora biti eksplicitno pozvan od strane korisnika dok se metoda finalize () poziva od strane sakupljača smeća, neposredno prije nego što je objekt uništen. Proučimo neke druge razlike između njih uz pomoć usporednog dijagrama prikazanog u nastavku.

Tablica usporedbe

Osnova za usporedbudispose ()finalizirati ()
definiranMetoda dispose () je definirana u sučelju IDisposable sučelja.ID metode finalize () definiran je u klasi java.lang.object.
Sintaksapublic void Dispose () {
/ / Dispose code ovdje
}
zaštićeno nevažeće finaliziranje () {
// ovdje dovršite kod
}
pozivatiKorisnik pokreće metodu dispose ().Sakupljač smeća poziva metodu finalize ().
SvrhaMetoda dispose () koristi se za oslobađanje neupravljanih resursa kad god se pozove.Metoda finalize () se koristi za oslobađanje unmanaged resursa prije nego što je objekt uništen.
izvršenjeMetoda dispose () mora biti implementirana kad god postoji close () metoda.Metoda finalize () mora biti implementirana za neupravljane resurse.
Specifikator pristupaMetoda dispose () je deklarirana kao javna.Metoda finalize () je deklarirana kao privatna.
RadnjaMetoda dispose () je brža i trenutačno raspolaže objektom.Metoda finalize je sporija u odnosu na raspolaganje
IzvođenjeMetoda raspolaže () trenutnom radnjom, stoga ne utječe na izvedbu web-mjesta.Metoda finalize () koja sporije utječe na izvedbu web-lokacija.

Definicija dispos ()

Metoda dispose () oslobađa neupravljane resurse koje drži objekt klase. Neupravljani resursi su datoteke, podatkovne veze, itd. Metoda dispose () je deklarirana u sučelju IDisposeable i implementirana je od strane klase implementiranjem sučelja IDisposable. Ova metoda se ne poziva automatski. Programer ga mora ručno implementirati kada stvarate prilagođenu klasu koju će koristiti drugi. Metoda ima sljedeću sintaksu:

 public void dispose () {// ovdje oduzeti kod} 

U gornjoj sintaksi možete primijetiti da je metoda deklarirana kao javna. To je zato što je ova metoda definirana u sučelju IDisposable i mora biti implementirana od strane klase koja implementira ovo sučelje. Dakle, kako bi se osigurala dostupnost klasi implementacije, metoda je proglašena javnom.

Ova metoda se poziva ručno pomoću koda programa koji je implementiran za pozivanje. Izvedba metoda je brza i odmah oslobađa resurse koje drži objekt klase.

Definicija finaliziranja ()

Metoda finalize () definirana je u klasi objekta . Koristi se za aktivnosti čišćenja. Ova metoda je pozvana od strane sakupljača smeća kada se referenca objekta dugo ne koristi. Sakupljač smeća automatski oslobađa upravljane resurse, ali ako želite osloboditi neupravljane resurse kao što su ručka datoteke, podatkovna veza, itd., Metoda finaliziranja mora se implementirati ručno. Sakupljač smeća pokreće metodu finalize () neposredno prije nego što potpuno uništi objekt.

Sintaksa metode finalize ():

 protected void finalize () {// ovdje finalizira kod} 

U gornjoj sintaksi, metoda finalize () je deklarirana kao zaštićena. Razlog tome je što metoda finalize () ne smije biti dostupna izvan klase i mora biti dostupna samo sakupljaču smeća.

Metoda finalize () utječe na cijenu izvedbe jer trenutno ne oslobađa memoriju. U C # se metoda finalizira automatski s destruktorima.

Ključne razlike između dispos () i finaliziranja ()

  1. Metoda dispose () je definirana u sučelju IDisposable . S druge strane, metoda finalize () definirana je u objektu klase.
  2. Metoda dispose () mora se ručno pozvati unutar koda od strane programera, dok se metoda finaliziranja automatski poziva od strane sakupljača smeća prije nego što uništi objekt.
  3. Metoda dispose može biti pozvana u bilo koje vrijeme, dok je metoda finalize pozvana od strane skupljača smeća kada otkrije da taj objekt nije bio referenciran dugo vremena.
  4. Metoda dispose () implementirana je u klasi nakon implementacije IDisposable sučelja. Metoda finalize () mora biti implementirana samo za neupravljane resurse jer upravljani resursi automatski oslobađaju sakupljači smeća.
  5. Specifikator pristupa metode dispose () je javan jer je definiran u sučelju IDisposable i implementiran bi od klase koja implementira ovo sučelje, stoga bi trebala biti javna. S druge strane, metoda finalize () ima zaštićeni pristup specifikatoru tako da ne bi trebao biti dostupan niti jednom članu izvan klase.
  6. Metoda dispose () je brza i odmah oslobađa objekt, stoga ne utječe na trošak izvedbe. Metoda finalize () je sporija i ne oslobađa odmah resurse koje objekt drži.

Zaključak:

Preporučljivo je koristiti metodu dispose () preko metode finalize () jer je brža od finaliziranja. Također, može se zvati u bilo koje vrijeme, kada je to potrebno.

Top