Diferencia entre desechar y finalizar

Diferencia entre desechar y finalizar

En los lenguajes de programación, un objeto solo puede tener variable durante su existencia, después de la instancia no se puede modificar. Por lo tanto, no se puede asignar la misma celda de memoria a nuevos valores, por lo que se requiere algún tipo de gestión de memoria automatizada para administrar los espacios no utilizados. Estos espacios no utilizados se llaman basura y todo el proceso de gestión de memoria eficiente se llama recolección de basura.

El objetivo principal de un recolector de basura es separar los objetos muertos de los objetos vivos y reclamar el espacio para la reutilización. Básicamente, todo funciona en el montón administrado, que no es más que un bloque de memoria y el recolector de basura verifica periódicamente la memoria del montón para asignar memoria a nuevos objetos. Hay dos métodos para liberar recursos no administrados como archivos y conexiones de bases de datos: desechar y finalizar.

Este artículo le ayuda a comprender la diferencia entre los dos.

¿Qué es un método de desechación??

Dispose es una forma estándar para que los usuarios le digan a los objetos que liberen sus recursos y no intenten acceder a los objetos nuevamente. El método de disposición proporciona el control de la limpieza de memoria explícita al hacer que los objetos no sean.

Cuando los usuarios llaman al método Dispose (), se supone que el objeto libera todos sus recursos costosos, lo que hace que esté disponible para reutilizar. Nunca es llamado por el recolector de basura que solo viene a jugar cuando la memoria administrada se vuelve escasa. Se utiliza una interfaz especial llamada "Idisposable" para decidir dónde y cómo implementar la disposición (). Pero, ¿qué sucede cuando no se llama al método de eliminación??

¿Qué es un método final??

Si el método de disposición no se llama, el plan de retroceso es usar el método Finalize () para la limpieza. El recolector de basura lo llama a realizar una limpieza de recursos final antes de liberar la memoria. El concepto de limpieza oportuna se vuelve inaplicable aquí porque, en lugar de desactivar la memoria de inmediato, el objeto se agrega a la cola de finalización solo para ser destruida más tarde. Finalize es más como una salvaguardia establecida en el caso de un error de programación y la eliminación no limpia los recursos en cuyo caso el método Finalize () es llamado por el recolector de basura para eliminar objetos inalcanzables en cualquier secuencia que le guste.

Diferencia entre desechar y finalizar

Conceptos básicos de desechar y finalizar

Se llama al método de eliminación para acelerar la liberación de recursos no administrados, como manijas de bases de datos, manijas de archivos, semáforos y otros objetos asignados por el sistema operativo. Se invoca el método de disposición para ejecutar el código requerido para limpiar la memoria no utilizada y los recursos escasos como las manijas de GDI. En términos simples, el método de disposición proporciona el control de la limpieza de memoria explícita. El método finalizar, por otro lado, es parte de la recolección de basura que se utiliza para realizar la operación de limpieza final en un objeto antes de que se recolecte la basura. En pocas palabras, el método finalizar se llama a recursos libres no administrados en poder de un objeto antes de que se destruya.

Invocar de disposición y finalización

El método de eliminación puede ser llamado explícitamente por el código de usuario y la clase que está implementando el método para deshacerse de los recursos. Sin embargo, la memoria no se puede liberar hasta que el recolector de basura realice el proceso de limpieza. El método puede llamarse incluso si aún existen otras referencias al objeto. El método finalizar, por el contrario, puede ser invocado por el recolector de basura solo después de que determina que la última instancia de objeto de memoria se destruye y no existe más referencias al objeto. Después de ejecutar el método finalize, el objeto se elimina de la memoria de la pata del montón.

Implementación de la eliminación y finalización

El proceso de eliminación de un objeto de la memoria se llama patrón de eliminación, que puede usarse para objetos que acceden a los recursos no administrados porque el recolector de basura no puede reclamar recursos no administrados. La interfaz "Idisposable" junto con un método de eliminación adicional (booleano) se implementa solicitando la liberación de recursos no administrados. Se ejecuta un método finalizado cuando la instancia de un objeto se destruye antes de su trafica. Es un método no determinista que ocurre a discreción del recolector de basura y puede que ni siquiera ocurra. No debe implementarse en objetos administrados hasta que sea extremadamente necesario.

Rendimiento de la eliminación y finalización

Es mucho más rápido usar un método de deseche en lugar de finalizar para la eliminación instantánea de objetos. Los destructores se convierten automáticamente para finalizar el método en tiempo de ejecución. El recolector de basura lo invoca automáticamente cuando el objeto sale del alcance, que generalmente ocurre cuando la instancia de ese objeto se destruye. El problema con el método finalizar es que no es determinista, lo que significa que no es seguro cuándo reclamar la memoria ya no se hace referencia a través de la recolección de basura. Sin embargo, puede no liberar la memoria de inmediato; De hecho, puede que nunca se llame y no se puede forzar explícitamente.

Deshacerse de. Finalizar: Gráfico de comparación

Resumen de disposición vs finalizar

La principal diferencia entre los métodos de eliminación y finalización es que el primero es un método determinista que elimina instantáneamente los objetos cuando ya no están en uso, mientras que el segundo es un método no determinista para asignar recursos no administrados, lo que significa que es un método de retroceso para liberar Instancias de objeto de memoria cuando salen del alcance antes de su desorden. Siempre es aconsejable utilizar el método de eliminación sobre la finalización a menos que sea extremadamente necesario.

En otros términos, Finalize es una salvaguardia establecida para limpiar los recursos no administrados cuando el método de eliminación no se puede llamar en caso de error de programación. El método finalizar es llamado por el recolector de basura cuando un objeto está a punto de ser expulsado de la memoria del montón.