Diferència entre disposar () i finalitzar () en C #

Autora: Laura McKinney
Data De La Creació: 2 Abril 2021
Data D’Actualització: 17 Ser Possible 2024
Anonim
Diferència entre disposar () i finalitzar () en C # - Tecnologia
Diferència entre disposar () i finalitzar () en C # - Tecnologia

Content


Els mètodes disposar () i finalize () són els mètodes de C # que s'invocen per alliberar els recursos no gestionats en poder d'un objecte. El mètode dispose () es defineix dins de la interfície IDisposable mentre que, el mètode finalize () es defineix dins de l'objecte de classe. La diferència principal entre disposar () i finalize () és que el mètode disposar() ha de ser invocat explícitament per l'usuari mentre que, el mètode finalitzar () és invocat pel col·lector d'escombraries, just abans que es destrueixi l'objecte. Estudiem algunes altres diferències entre elles amb l’ajut d’un gràfic de comparació que es mostra a continuació.

  1. Gràfic de comparació
  2. Definició
  3. Diferències claus
  4. Conclusió

Gràfic de comparació

Bases per a la comparaciódisposar ()finalitzar ()
DefinitEl mètode disposar () es defineix a la interfície que es pot identificar.El mètode finalize () id definit a la classe java.lang.object.
Sintaxipublic void Eliminar () {
// Eliminar el codi aquí
}
protected void finalize () {
// codi de finalització aquí
}
Invocat L'usuari invoca el mètode dispose ().El mètode finalize () és invocat pel col·leccionista.
PropòsitEl mètode disposar () s'utilitza per alliberar recursos no gestionats sempre que s'invoca.El mètode finalize () s'utilitza per alliberar recursos no gestionats abans que l'objecte es destrueixi.
ImplementacióEl mètode disposar () s'ha d'implementar sempre que hi hagi un mètode proper ().El mètode finalize () s'ha d'implementar per a recursos no gestionats.
Especificador d'accésEl mètode disposar () es declara públic.El mètode finalize () es declara privat.
Acció El mètode dispose () és més ràpid i elimina immediatament un objecte.El mètode de finalització és més lent en comparació amb el de disposar
RendimentEl mètode disposs () realitza l'acció instantània, per tant, no afecta el rendiment de llocs web. El mètode finalitzar () sent més lent afecta el rendiment dels llocs web.


Definició de dispose ()

El mètode dispose () allibera els recursos no gestionats que tenen un objecte de la classe. Els recursos no gestionats són fitxers, connexions de dades, etc. El mètode disposar () es declara a la interfície Identificable i la implementa la classe implementant la interfície IDisposable. Aquest mètode no s’anomena automàticament. El programador l’ha d’implementar manualment quan creeu una classe personalitzada que altres usuaris l’utilitzaran. El mètode té la sintaxi següent:

public void dispose () {// Eliminar el codi aquí}

A la sintaxi anterior, podeu observar que el mètode està declarat com a públic. És a causa que aquest mètode està definit a la interfície identificable i ha de ser implementat per la classe que implementa aquesta interfície. Per tant, per proporcionar accessibilitat a la classe d’implementació, el mètode es declara com a públic.


Aquest mètode s’invoca manualment pel codi d’un programa ja que s’implementa per invocar-lo. El rendiment dels mètodes és ràpid i allibera immediatament els recursos de l'objecte d'una classe.

Definició de finalize ()

El mètode finalize () es defineix al objecte classe. S'utilitza per a activitats de neteja. El recol·lector d’escombraries l’anomena aquest mètode quan la referència d’un objecte no s’utilitza durant molt de temps. El col·leccionista d’escombraries allibera els recursos gestionats automàticament, però si voleu alliberar els recursos no gestionats com ara el maneig de fitxers, la connexió de dades, etc., el mètode de finalització s’ha d’implementar manualment. El col·leccionista d'escombraries invoca el mètode finalize () just abans que destrueixi l'objecte completament.

La sintaxi del mètode finalitza ():

protected void finalize () {// codi de finalització aquí}

A la sintaxi anterior, el mètode finalize () es declara protegit. La raó d'aquest motiu és que el mètode finalitzar () no ha de ser accessible des de fora de la classe i només ha de ser accessible per al recollidor d'escombraries.

El mètode finalize () afecta el cost de la performance, ja que no allibera la memòria a l’instant. A C #, el mètode de finalització s’anomena automàticament amb destructors.

  1. El mètode disposar () es defineix en una interfície Identificable. D'altra banda, el mètode finalize () es defineix a la classe objecte.
  2. El mètode disposar () ha de ser invocat manualment a l'interior del codi per un programador, mentre que el mètode de finalització és invocat automàticament pel recollidor d'escombraries abans que destrueixi l'objecte.
  3. El mètode de disposar podria ser invocat en qualsevol moment, mentre que el mètode finalitzar és invocat pel col·leccionista quan troba que fa temps que no es fa referència a aquest objecte.
  4. El mètode disposar () s’implementa en una classe després d’implementar la interfície IDisposable. El mètode finalize () només s'ha d'implementar per a recursos no gestionats perquè els recursos gestionats són lliurats automàticament pel recollidor d’escombraries.
  5. L’especificador d’accés del mètode disposar () és públic tal com està definit a la interfície IDisposable i seria implementat per la classe que implementa aquesta interfície, per tant, hauria de ser pública. D'altra banda, el mètode finalize () ha protegit l'especificador d'accés de manera que no hauria de ser accessible a cap membre fora de la classe.
  6. El mètode disposar () és ràpid i allibera l'objecte instantàniament, per tant, no afecta el cost de rendiment. El mètode finalize () és més lent i no allibera els recursos que té l'objecte a l'instant.

Conclusió:

Es recomana fer servir el mètode dispose () sobre el mètode finalize () ja que és més ràpid que el finalize. A més, es pot trucar en qualsevol moment, quan sigui necessari.