El ViewState de una página ASP.NET 2.0 es lo que permite la "magia" de los PostBack. Se trata de un campo oculto que se envía con el formulario que introduce ASP.NET en todas las páginas ASPX y contiene información sobre el estado de los controles de la misma. A partir de él se recupera dicho estado y parece que la página funciona como un formulario de escritorio tradicional.

El caso es que si tenemos muchos controles este ViewState puede llegar a ocupar mucho y eso hace que cada PostBack al servidor sea muy lento y se empiece a notar demasiado. En casos un poco extremos podemos tratar de minimizar este trasiego de información entre cliente y servidor persistiendo el ViewState en otro lugar en lugar de en un campo oculto de la página. Para ello ASP.NET 2.0 ofrece "de serie" un objeto especial llamado SessionPageStatePersister que permite conseguir precisamente ese efecto y qeu el ViewState se conserve en la memoria del servidor.

Para ello lo único que hay que hacer es sobreescribir la propiedad PageStatePesister de la página de forma que devuelva una referencia a un objeto de la clase que acabamos de mencionar. Muy sencillo.

Como ejemplo de cómo hacerlo he elaborado un pequeño vídeo que muestra paso a paso y con instrucciones la forma de hacerlo y compara una misma página antes y después de usar esta técnica. El vídeo es del mismo estilo que los que tenemos en campusMVP (aunque allí suelen ser algo más largos y con voz) y lo pongo como muestra del tipo de contenido multimedia que podrás encontrar en nuestros cursos:

Si no ves bien este vídeo pulsa aquí.

Esto es útil para casos en los que el retardo debido al tamaño del ViewState sea grande, pero hay que tener cuidado ya que aunque ganamos mejora en la velocidad de los PostBack perdemos recursos en el servidor puesto que el ViewState se almacena en la RAM de éste y la aplicaión ocupará mucho más.

No se recimienda usar esta técnica para todas las páginas de un sitio o de manera generalizada. Ahora bien, si necestias hacerlo lo tienes muy fácil: creas una página que sobreescriba la propiedad y haces que todas las demás hereden de ésta.

Esta técnica se puede generalizar para crear clases de persistencia propias que en lugar de almacenar el ViewState en sesión lo hagan en una base de datos, archivos, etc... Queda a tu imaginación.

Mañana o pasado pondré una continuación de este post para enseñar cómo podemos conseguir los mismo pero con otra técnica completamente distinta y que además funciona en TODAS las versiones de ASP.NET, desde la 1.0. ¡Hasta pronto!

Escrito por un humano, no por una IA