Diferencia entre dispose () y finalize () en C #

Autor: Laura McKinney
Fecha De Creación: 2 Abril 2021
Fecha De Actualización: 10 Mayo 2024
Anonim
Finalize vs Dispose | C# Interview Questions
Video: Finalize vs Dispose | C# Interview Questions

Contenido


Los métodos dispose () y finalize () son los métodos de C # que se invocan para liberar los recursos no administrados que posee un objeto. El método dispose () se define dentro de la interfaz IDisposable, mientras que el método finalize () se define dentro del objeto de clase. La principal diferencia entre dispose () y finalize () es que el método disponer() tiene que ser invocado explícitamente por el usuario, mientras que el método finalizar() es invocado por el recolector de basura, justo antes de que el objeto sea destruido. Estudiemos algunas otras diferencias entre ellos con la ayuda de un cuadro de comparación que se muestra a continuación.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Conclusión

Cuadro comparativo

Bases para la comparacióndisponer ()finalizar ()
DefinidoEl método dispose () se define en la interfaz IDisposable interface.El método finalize () id definido en la clase java.lang.object.
Sintaxispúblico vacío Eliminar () {
// Deseche el código aquí
}
vacío protegido finalizar () {
// código de finalización aquí
}
Invocado El método invocar () es invocado por el usuario.El recolector de basura invoca el método finalize ().
PropósitoEl método dispose () se usa para liberar recursos no administrados cada vez que se invoca.El método finalize () se usa para liberar recursos no administrados antes de que se destruya el objeto.
ImplementaciónEl método dispose () se implementará siempre que haya un método close ().El método finalize () se implementará para los recursos no administrados.
Especificador de accesoEl método dispose () se declara como público.El método finalize () se declara como privado.
Acción El método dispose () es más rápido y elimina instantáneamente un objeto.El método de finalizar es más lento en comparación con deshacerse
ActuaciónEl método disposes () realiza la acción instantánea, por lo tanto, no afecta el rendimiento de los sitios web. El método finalize () es más lento y afecta el rendimiento de los sitios web.


Definición de dispose ()

El método dispose () libera los recursos no administrados que posee un objeto de la clase. Los recursos no gestionados son archivos, conexiones de datos, etc. El método dispose () se declara en la interfaz IDisponible y la clase lo implementa implementando la interfaz IDisposable. Este método no se llama automáticamente. El programador tiene que implementarlo manualmente cuando está creando una clase personalizada que será utilizada por otros. El método tiene la siguiente sintaxis:

public void dispose () {// Deseche el código aquí}

En la sintaxis anterior, puede observar que el método se declara como público. Esto se debe a que este método está definido en la interfaz IDisposable y debe ser implementado por la clase que implementa esta interfaz. Entonces, para proporcionar accesibilidad a la clase implementadora, el método se declara como público.


Este método es invocado manualmente por el código de un programa a medida que se implementa para invocar. El rendimiento de los métodos es rápido e instantáneamente libera los recursos que posee el objeto de una clase.

Definición de finalize ()

El método finalize () se define en el objeto clase. Se utiliza para actividades de limpieza. El recolector de basura llama a este método cuando la referencia de un objeto no se utiliza durante mucho tiempo. El recolector de basura libera los recursos administrados automáticamente, pero si desea liberar los recursos no administrados, como el identificador de archivos, la conexión de datos, etc., el método de finalización debe implementarse manualmente. El recolector de basura invoca el método finalize () justo antes de que destruya el objeto por completo.

La sintaxis del método finalize ():

Void protegido finalize () {// código de finalización aquí}

En la sintaxis anterior, el método finalize () se declara como protegido. La razón detrás de esto es que el método finalize () no debe ser accesible desde fuera de la clase, y solo debe ser accesible para el recolector de basura.

El método finalize () afecta el costo del rendimiento ya que no libera la memoria al instante. En C #, el método de finalización se llama automáticamente con destructores.

  1. El método dispose () se define en una interfaz IDisposable. Por otro lado, el método finalize () se define en la clase objeto.
  2. El método dispose () debe ser invocado manualmente dentro del código por un programador, mientras que el recolector de basura invoca automáticamente el método finalize antes de que destruya el objeto.
  3. El método dispose podría invocarse en cualquier momento, mientras que el recolector de basura invoca el método finalize cuando descubre que ese objeto no ha sido referenciado durante mucho tiempo.
  4. El método dispose () se implementa en una clase después de implementar la interfaz IDisposable. El método finalize () debe implementarse solo para recursos no gestionados porque el recolector de basura libera automáticamente los recursos administrados.
  5. El especificador de acceso del método dispose () es público como se define en la interfaz IDisposable y sería implementado por la clase que implementa esta interfaz, por lo tanto, debería ser público. Por otro lado, el método finalize () tiene un especificador de acceso protegido para que no sea accesible a ningún miembro fuera de la clase.
  6. El método dispose () es rápido y libera el objeto instantáneamente, por lo tanto, no afecta el costo de rendimiento. El método finalize () es más lento y no libera los recursos que posee el objeto instantáneamente.

Conclusión:

Se sugiere utilizar el método dispose () sobre el método finalize () ya que es más rápido que finalize. Además, se puede llamar en cualquier momento, cuando sea necesario.