Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Limpiar recursos no administrados

En el caso de la mayoría de los objetos creados por la aplicación, puede utilizar el recolector de elementos no utilizados de .NET Framework para administrar la memoria. No obstante, cuando se crean objetos que incluyen recursos no administrados, debe liberar explícitamente dichos recursos cuando termine de utilizarlos en la aplicación. Los tipos más comunes de recurso no administrado son objetos que contienen recursos del sistema operativo, como archivos, ventanas, conexiones de red o conexiones de bases de datos. Aunque el recolector de elementos no utilizados puede realizar el seguimiento de la duración de un objeto que encapsula un recurso no administrado, no conoce cómo liberar y limpiar el recurso no administrado.

Si sus tipos utilizan recursos no administrados, debe hacer lo siguiente:

  • Implemente el patrón de Dispose. Para esto es necesario proporcionar una implementación IDisposable.Dispose a fin de habilitar la liberación de recursos no administrados de forma determinista. Un consumidor de su tipo llama a Dispose cuando el objeto (y los recursos que utiliza) ya no se necesita. El método Dispose libera inmediatamente los recursos no administrados.

  • Planifique la liberación de los recursos no administrados en el caso de que un consumidor de su tipo olvide llamar a Dispose. Existen dos modos de hacer esto:

    • Utilizar un controlador seguro para incluir el recurso no administrado. Esta es la técnica recomendada. Los controladores seguros se derivan de la clase System.Runtime.InteropServices.SafeHandle e incluyen un método Finalize eficaz. Al usar un controlador seguro, simplemente se implementa la interfaz IDisposable y se llama al método Dispose del controlador seguro en la implementación IDisposable.Dispose. El recolector de elementos no utilizados llama automáticamente al finalizador del controlador seguro si no se llama a su método Dispose.

      o bien,

    • Invalide el método Object.Finalize. La finalización habilita la liberación de forma no determinista de recursos no administrados cuando el consumidor de un tipo no llama a IDisposable.Dispose para deshacerse de ellos de forma determinista. Sin embargo, como la finalización del objeto puede ser una operación compleja y propensa a errores, se recomienda usar un controlador seguro en lugar de proporcionar su propio finalizador.

Los consumidores de su tipo pueden entonces llamar a la implementación IDisposable.Dispose directamente para liberar la memoria que utilizan los recursos no administrados. Cuando se implementa correctamente un método Dispose, el método Finalize del controlador seguro o su propia invalidación del método Object.Finalize actúa como medida de seguridad para limpiar los recursos en caso de que no se llame al método Dispose.

Implementar un método Dispose

Describe cómo implementar el patrón de Dispose para liberar recursos no administrados.

Usar objetos que implementan IDisposable

Describe cómo los consumidores de un tipo garantizan que se llame a su implementación Dispose. Se recomienda utilizar la instrucción using de C# o la instrucción Using Visual Basic para realizar este procedimiento.

System.IDisposable

Define el método Dispose para liberar recursos no administrados.

Object.Finalize

Proporciona la finalización del objeto si el método Dispose no libera los recursos no administrados.

GC.SuppressFinalize

Suprime la finalización. Se llama a este método de forma personalizada desde un método Dispose para impedir que se ejecute un finalizador.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft