ASP.NET 2.0
Cache en ASP.NET 2.0

Fecha: 31/Ago/2004 (30/Ago/2004)
Autor: José Manuel López Izquierdo

Nota del Guille:
Este artículo es una traducción de:
http://www.c-sharpcorner.com/Code/2004/July/CachingInASPNET2.asp


Introdución

Una de las aplicaciones en donde se requiere mayor rendimiento es la presentación web de Resultados tomados de una base de datos. Si necesita tener acceso a la base de datos con cada petición de página, entonces la respuesta será muy lenta. Podemos evitar esta situación con el famoso Cache. Usted puede depositar los datos en memoria cuando la página se solicita por primera vez, y por lo tanto para la petición subsecuente la página puede utilizar dicho Cache. Esto reduce viajes de la red, reduce al mínimo la carga de trabajo y de la base de datos del servidor, por lo tanto reduce el incremento de peticiones y de funcionamiento.

Aunque, ASP.NET 1.0 ofrece una variedad de formas de depositar los resultados en Cache, si el contenido del Cache de una tabla en memoria se cambia en la base de datos después de la primera petición, su uso exhibirá únicamente los datos viejos. Desafortunadamente no tenemos una suficiente solución para este problema antes del lanzamiento del ASP.NET 2.0. La más nueva versión está teniendo una nueva característica llamada "CACHE SQL", que es una solución para este problema. El nuevo marco amplía más lejos las técnicas del cache existentes, e incluso tienen un gran alcance y son más fáciles utilizar y manejar.

En este artículo vamos a ver las nuevas y mejoradas técnicas de cache disponibles en el ASP.NET 2.0. Primero, veamos sobre algunos realces del Cache de Datos.

Cache de Datos

El Cache de Datos permite depositar objetos al azar, de modo que sus usos no necesiten reconstruirlos o Solicitarlos del servidor. Un nuevo sistema esta en la clase System.Web.Caching.CacheDependency disponible en el ASP.NET 2.0; le permite escribir su propia puesta en práctica de la dependencia del cache. Usted puede depositar más lejos los datos usando los nuevos controles de DataSource disponibles en el ASP.NET 2.0, el código siguiente describe cómo permitir el Cache con un control de SqlDataSource

<asp:SqlDataSource ID="SqlDataSource1"
EnableCaching="true"
CacheDuration="600"
ConnectionString = "Server=localhost;database=Pubs"
SelectCommand="SELECT Title FROM Authors"
Runat="server" />

Invalidación del Cache SQL

Como hemos visto anterior, su uso puede dar viejos datos cuando se toma del cache, sin el conocimiento que los datos pueden cambar dentro de la base de datos. En el ASP.NET 1.X cuando dábamos el valor mínimo para la duración del cache esto aumentará la carga de la red. Si damos el valor máximo para la duración del cache entonces conseguiremos datos incorrectos. En vez de esto y algo nuevo sí se utiliza la anulación del cache SQL. Esto nos permite que se ponga al día su contenido depositado automáticamente siempre que los datos cambien en la base de datos.

Podemos partir esta característica en dos casos, de acuerdo con la versión del servidor del SQL usted está teniendo. La nueva versión con el Nombre Código de “Yukon” ,Sql Server 2005, se puede configurar para notificar su uso siempre que los cambios se hayan realizado a la base de datos o una tabla de la base de datos o una fila de la base de datos. Pero en el SQL 7.0 o 2000 no hay ningún modelo de Notificación construido. Por lo tanto, ASP.Net tiene que supervisar constantemente la base de datos para comprobar y saber si hay cambios. Las figurassiguientes describen estos dos casos

En cualquier caso, si hay un cierto cambio, entonces los elementos agregados al cache dependen de la base de datos se quitan del cache. Es decir, se invalidan esos Elementos.

Como Activar la Invalidación del Cache SQL

Usted tiene que hacer un determinado proceso antes de utilizar la anulación del cache del SQL. Dos pasos implican éste proceso.

  1. Configure SQL Server para que soporte la Invalidación del cache SQL
  2. Añada la información de configuración respectiva en el web.config.

Configure SQL para que soporte la Invalidación del cache SQL

Para configurar su servidor SQL usted tiene que utilizar la línea de comando utilidad que está disponible en su \WINDOWS\Microsoft.NET\Framework\v2.x.xxxxx. Ejecute el Siguiente Comando de la Siguiente Forma:

aspnet_regsql –E –d Pubs –ed

La línea antes indicada permitirá que la base de datos Pubs Active la Invalidación SQL. La línea siguiente permitirá activar en la tabla de autores.

Aspnet_regsql –E –d Pubs –t Authors –et

Cuando usted ejecuta el primer comando agregará una tabla nueva de la base de datos llamada AspNet_SqlCacheTablesForChangeNotification. Esta tabla tendrá una lista de todas las tablas, cuáles se permiten para la anulación del cache del SQL.


Ilustración 1 - Ejecución del Comando y Tablas Aderidas para Notificación

Añada la información de configuración  respectiva en el web.config

Incluya las siguientes lineas bajo el <system.web>  dentro del web.config.

<caching>
<sqlCacheDependency enabled ="true" pollTime="60000">
<databases>
<add name="pubs" connectionStringName="AppConnectionString1" />
</databases>
</sqlCacheDependency>
</caching>

En PollTime antes dicho del código el valor es en milisegundos. En nuestro caso 60000 milisegundos, en donde la aplicación comprobará la tabla del cache para saber si hay cambios

La ejemplo siguiente exhibe el contenido de la tabla de títulos de la base de datos Pubs con la ventaja de la dependencia del cache del SQL en el control sqldatasource. La página supervisará la tabla para los cambios. Como no hay cambios, la página será tomada del cache, una vez que los datos cambien la respuesta invaidatedy se producirá en el control y los datos se Recargarán.

<asp:SqlDataSource ID="SqlDataSource1" Runat="server" CacheDuration="500" SqlCacheDependency="PubsDB: Titles" ProviderName="<%$ ConnectionStrings:AppConnectionString1.ProviderName %>"> </asp:SqlDataSource>

Si usted desea hacer el mismo SqlCacheDependency con el <%@ OutputCache %> entonces usted tiene que cambiar su código según lo demostrado abajo.

<%@ OutputCache Duration="3600" VaryByParam="none"  SqlDependency="pubs:Titles"%>

<asp:SqlDataSource ID="SqlDataSource1" Runat="server" ProviderName="<%$ ConnectionStrings:AppConnectionString1.ProviderName %>"> </asp:SqlDataSource>

Output Caching

Output Caching permite que usted deposite respuestas dinámicas del control de la página y del usuario en cualquier seccion en el cache Stream de Salida del HTTP1.1. Ahora vamos a ver sobre algunos de los nuevos realces en ésta técnica.

Post cache Substitution

Consideremos el escenario siguiente, un parte de su página tiene una región dinámica pequeña. En este caso usted no necesita un cache de toda la la página, y usted necesita poner al día el tiempo en la página con tiempo actual. Antes se  Necesitaba utilizar un usercontrol separando parte de la página y así de depositar el fragmento en el cache. En vez de esto ASP.NET 2.0 introdujo una nueva característica llamada Post cache Substitution (una nueva API Response.WriteSubstitution), usando esto usted puede insertar el contenido dinámico, tiempo en éste caso, en la página por cada petición.

 

Disk Output Cache

Aquí viene la nueva característica, usted puede ahorrar las respuestas almacenandolas en el cache del disco. Así se puede incrementar la cantidad de elementos en el cache sin preocuparse de la Memoria, vale indicar que el cache persiste y para que éste sea eliminado se debe reiniciar la Aplicacion. Para utilizar esta opcion usted tiene que incluir la Directiva DiskCacheable="true" %> en <%@ OutputCache %> para poder usar ésta característica para su página.

Cache Profiles

Una página puede ser incluida en cache y enviada basándose en los ajustes del perfil del cache en su archivo de configuración. Esto permite que usted maneje el número de páginas centralmente. No obstante, usted puede eliminar los ajustes del perfil del cache con los ajustes del cache de la página usando la Directiva de Output cache. A continuación se demuestra el perfil del cache que se fija en el archivo de configuración y el uso correspondiente.

En el Web.Config…

<caching >
   <outputCacheSettings>
      <outputCacheProfiles>
         <add name="For1Minute" duration="60" />
      </outputCacheProfiles>
   </outputCacheSettings>
</caching>

 En la Página…

 

<%@ OutputCache CacheProfile="CacheFor60Seconds" VaryByParam="Id" %>

 

Fragment Caching

En ASP.NET 1.0 ud puede especificar los elementos que formaran el Fragment cache solamente durante el tiempo de Diseño. Pero en ASP.NET 2.0 el fragment caching ControlCachePolicy API permite controlar los parámetros que se utilizaran para cada control de Usuario e Incluso a través de Programación.

Conclusion

Las ventajas de depositar en cache, con el ASP.NET 1.x son Considerables. Ahora, los nuevos controles de DataSource permiten que usted deposite los datos, sin código, La anulación del cache SQL permite que usted guarde el contenido siempre actualizado del cache, y es útil al usuario, la substitución del cache ya que permite que usted inserte el contenido dinámico en una página depositada. Totalmente la más nueva versión del ASP.NET trae nuevos realces en cahing, lo cuál hace más fácil y más eficaz su manejo y control.

Autor:

José Manuel López Izquierdo está radicado en Ecuador y es Microsoft Most Value Professional (MVP ASP/ASP .NET) y Microsoft Certified Professional .NET. Es además Ingeniero de Sistemas y Catedrático de la Universidad Católica de Azogues; Jefe de Sistemas de la Dirección Provincial de Salud del Cañar; y Director de la sección de Sincronet.



ir al índice