2009-04-01 11 views
6

Estoy familiarizado con el patrón try {} finally {}, el patrón using() {} como forma de asegurar que se llame a Dispose(), pero para una página ASP.NET, es igual de seguro para Dispose of objects creado en el alcance de la página en el evento Page_Unload? ¿Tendría sentido anular el método Dispose() de la página?¿Es seguro creer que Page_Unload siempre se ejecutará y es un buen lugar para el código Dispose()?

No estoy seguro de qué código genera el evento Page_Unload, o el método Page Dispose(), por lo que no sé cuáles son las garantías de que se ejecutará.

Respuesta

9

El evento de descarga se produce en el ciclo de vida del control justo antes de desecharlo. Como la página en sí es un control, el evento de descarga también se genera. Cada control que agregue a la página será parte del ciclo de vida de la página. Entonces, si tiene un control que necesita una limpieza, el control en sí mismo debe manejar cualquier posible limpieza en sí mismo. No debe preocuparse por esto, siempre que el control haya sido agregado a la página y siga el principio de encapsulación.

El documentation dice que debe usar esto incluso "para hacer una limpieza final para controles específicos, como cerrar conexiones de bases de datos específicas del control". Mi recomendación sería evitar el evento de descarga. Cuando sea posible, haga cualquier código de limpieza lo antes posible, así que use "usar" si puede. En cierto modo, es como la elección entre usar una variable "global" en lugar de una variable local, esta última es preferible.

5

Creo que es seguro. Se supone que la carga de la página es donde se realiza la limpieza en el ciclo de vida de la página. Ver http://msdn.microsoft.com/en-us/library/ms178472.aspx que dice:

Este evento se produce para cada control y entonces para la página. En los controles, use este evento para realizar la limpieza final de los controles específicos , como el cierre de conexiones de base de datos específicas del control.

Para la página en sí, utilice este evento para realizar tareas de limpieza final, como cerrar archivos abiertos y conexiones de bases de datos, o finalizar el registro u otras tareas específicas de la solicitud.

Cuestiones relacionadas