Recomendado, 2024

La Elección Del Editor

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

Los métodos dispose () y finalize () son los métodos de C # que se invocan para liberar los recursos no administrados en poder de 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 usuario debe invocar explícitamente el método dispose (), mientras que el recolector de basura invoca el método finalize () justo antes de que se destruya el objeto. Estudiemos algunas otras diferencias entre ellos con la ayuda de una tabla de comparación que se muestra a continuación.

Gráfica comparativa

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.
Sintaxisvacío público Dispose () {
// Eliminar el código aquí
}
nulo protegido finalizado () {
// código de finalización aquí
}
InvocadoEl método dispose () es invocado por el usuario.El método finalize () es invocado por el recolector de basura.
PropósitoEl método dispose () se usa para liberar recursos no administrados cuando se invoca.El método finalize () se utiliza para liberar recursos no administrados antes de que se destruya el objeto.
ImplementaciónEl método dispose () debe implementarse siempre que exista un método close ().El método finalize () se implementará para recursos no administrados.
Especificador de accesoEl método dispose () se declara como público.El método finalize () se declara como privado.
AcciónEl método dispose () es más rápido y desecha instantáneamente un objeto.El método de finalización es más lento en comparación con la disposición
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 () siendo más lento 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 administrados son archivos, conexiones de datos, etc. El método dispose () se declara en la interfaz IDisposeable y es implementado por la clase implementando la interfaz IDisposable. Este método no se llama automáticamente. El programador debe implementarlo manualmente cuando está creando una clase personalizada que será utilizada por otros. El método tiene la siguiente sintaxis:

 public void dispose () {// Dispose code here} 

En la sintaxis anterior, puede observar que el método está declarado 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. Por lo tanto, 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 y libera instantáneamente los recursos que posee el objeto de una clase.

Definición de finalizar ()

El método finalize () se define en la clase de objeto . Se utiliza para actividades de limpieza. Este método es llamado por el recolector de basura cuando la referencia de un objeto no se usa 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 ():

 nulo protegido finalizado () {// 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 instantáneamente. En C # el método de finalización se llama automáticamente con los destructores.

Diferencias clave entre dispose () y finalize ()

  1. El método dispose () se define en una interfaz IDisposable . Por otro lado, el método finalize () se define en el objeto de clase.
  2. El método dispose () debe ser invocado manualmente dentro del código por un programador, mientras que el método finalize es invocado automáticamente por el recolector de basura antes de que destruya el objeto.
  3. El método de eliminación podría invocarse en cualquier momento, mientras que el recolector de basura invoca la finalización del método cuando encuentra 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 administrados porque los recursos administrados son liberados automáticamente por el recolector de basura.
  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, debe ser pública. Por otro lado, el método finalize () ha protegido el especificador de acceso para que no pueda ser 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 retenidos por el objeto instantáneamente.

Conclusión:

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

Top