Información general sobre el almacenamiento en caché en ASP.NET

Actualización: noviembre 2007

A menudo, una aplicación puede aumentar el rendimiento si almacena en memoria los datos a los que se tiene acceso con más frecuencia y cuya creación requiere un tiempo de procesamiento significativo. Por ejemplo, si su aplicación procesa grandes cantidades de datos utilizando una lógica compleja y, a continuación, los devuelve en un formato de informe que es consultado frecuentemente por los usuarios, resulta eficiente evitar la creación de dicho informe cada vez que un usuario lo solicita. De manera similar, si su aplicación incluye una página que procesa datos complejos pero que no se actualiza frecuentemente, no resulta eficiente que el servidor vuelva a crear dicha página en cada solicitud.

Para ayudarle a aumentar el rendimiento de la aplicación en estas situaciones, ASP.NET proporciona almacenamiento en caché mediante dos mecanismos básicos. El primero es el almacenamiento en caché de aplicaciones, que le permite almacenar en caché los datos que se generen, como un objeto DataSet o un objeto comercial de informe personalizado. El segundo es el almacenamiento en caché de los resultados de las páginas, que permite guardar los resultados del procesamiento de páginas y reutilizarlo, en lugar de volver a procesar la página cada vez que un usuario la solicite de nuevo.

Caché de aplicaciones

La memoria caché de aplicaciones permite almacenar en memoria datos arbitrarios mediante programación utilizando pares de clave y valor. El uso de la memoria caché de aplicaciones es similar al del estado de aplicación. Sin embargo, a diferencia de este último, los datos de la memoria caché de aplicaciones son volátiles, lo que significa que no se almacenan en memoria durante toda la duración de la aplicación. La ventaja de utilizar la memoria caché de aplicaciones es que ASP.NET se encarga de administrarla y quita los elementos cuando expiran o se invalidan, o cuando hay poca memoria. También puede configurar la memoria caché de aplicaciones para que notifique a su aplicación cuando se quita un elemento. Para obtener más información, vea Almacenar en caché datos de la aplicación.

El modelo que se debe seguir al utilizar la memoria caché de aplicaciones consiste en determinar si un elemento existe en caché cuando se tiene acceso al mismo y, si es así, utilizarlo. Si el elemento no existe, puede volver a crearlo y colocarlo de nuevo en caché. Este modelo le garantiza que siempre dispondrá de los datos más recientes en caché.

Para obtener más información, vea Cómo: Recuperar valores de elementos almacenados en caché.

Caché de resultados de páginas

La memoria caché de resultados de páginas almacena en memoria el contenido de una página ASP.NET procesada. Esto permite a ASP.NET enviar una página de respuesta a un cliente sin volver a recorrer el ciclo de vida de procesamiento de la página. El almacenamiento en caché de los resultados de las páginas resulta especialmente útil en aquellas páginas que no cambian a menudo, pero cuya creación requiere un cantidad significativa de procesamiento. Por ejemplo, si está creando una página Web con tráfico muy intenso para mostrar datos que no se actualizan con frecuencia, el almacenamiento en caché de los resultados de la página puede aumentar drásticamente el rendimiento de ésta. El almacenamiento en caché de páginas se puede configurar de forma individual para cada página o, de forma opcional, se pueden crear perfiles de caché en el archivo Web.config, lo que permitirá definir la configuración de caché una sola vez y utilizarla con múltiples páginas.

El almacenamiento en caché de resultados de páginas proporciona dos modelos de almacenamiento: almacenamiento en caché de páginas completas y almacenamiento en caché de una parte de las páginas. El almacenamiento en caché de páginas completas permite conservar el contenido completo de la página en memoria y utilizarlo para satisfacer las solicitudes de los clientes. El almacenamiento en caché de una parte de las páginas permite almacenar en caché ciertas partes de una página, mientras otras se recuperan de forma dinámica. Para obtener más información, vea Almacenar en caché páginas ASP.NET.

El almacenamiento en caché de una parte de las páginas puede ser de dos clases: almacenamiento en caché de controles y sustitución posterior al almacenamiento en caché. El almacenamiento en caché de controles, a veces también denominado almacenamiento en caché de fragmentos, permite almacenar en caché partes de la página resultante si la información se incluye en un control de usuario y, a continuación, éste se marca como almacenable en caché. Esto permite almacenar en memoria caché contenido específico de una página, mientras que la página completa no se almacena en caché y se vuelve a crear cada vez. Por ejemplo, si crea una página que muestra principalmente contenido dinámico, como información bursátil, pero también tiene secciones que son estáticas, como resúmenes semanales, puede colocar esas secciones estáticas en controles de usuario y permitir su almacenamiento en memoria caché.

La sustitución posterior al almacenamiento en caché es lo contrario. La página en su conjunto se almacena en memoria caché, pero los fragmentos situados dentro de la página son dinámicos. Por ejemplo, si crea una página que es estática durante ciertos períodos fijos de tiempo, puede configurar la página completa para que se almacene en caché. Si ha agregado un control Label a la página que muestra el nombre del usuario, el control Label no variará para cada actualización de página y para cada usuario, y mostrará el nombre del usuario que solicitó la página antes de que se almacenara en caché. Sin embargo, con la sustitución posterior al almacenamiento en caché, puede configurar la página para que se almacene en caché, pero también marcar secciones individuales como no almacenables en caché. En este caso, podría agregar sus controles Label a una sección no almacenable en caché y se crearían dinámicamente para cada usuario y cada solicitud de página. Para obtener más información, vea Almacenar en caché partes de una página ASP.NET.

Almacenar en caché páginas basadas en parámetros de solicitud

Además de almacenar en caché una única versión de una página, el almacenamiento en caché de resultados de páginas ASP.NET proporciona características para crear múltiples versiones de la página que difieren en varios parámetros de solicitud. Para obtener más información, vea Almacenar en memoria caché varias versiones de una página.

Eliminación de datos automática

ASP.NET puede quitar los datos de la memoria caché por cualquiera de estos motivos:

  • Hay poca memoria en el servidor y se produce un proceso conocido como barrido.

  • El elemento de la memoria caché ha expirado.

  • Ha cambiado la dependencia del elemento.

Para ayudarle a administrar los elementos almacenados en memoria caché, ASP.NET puede notificar a su aplicación cuando los elementos se quitan de la memoria caché.

Barrido

El barrido es el proceso de eliminar elementos de la memoria caché cuando la memoria es escasa. Los elementos se quitan cuando ha transcurrido cierto tiempo desde su última utilización o cuando se han marcado como de prioridad baja al agregarse a la memoria caché. ASP.NET utiliza el objeto CacheItemPriority para determinar los elementos que se deben compactar en primer lugar. Para obtener más información, vea Cómo: Agregar elementos a caché.

Expiración

Además de utilizar el barrido, ASP.NET quita automáticamente los elementos de la memoria caché cuando expiran. Al agregar un elemento a la memoria caché se puede establecer su expiración de acuerdo con la tabla siguiente.

Tipo de expiración

Descripción

Fecha de expiración variable

Especifica el intervalo de tiempo que debe transcurrir desde el último acceso al elemento para que éste expire. Por ejemplo, puede establecer que un elemento expire 20 minutos después del último acceso en caché.

Expiración absoluta

Especifica que un elemento expira en un momento determinado, sin tener en cuenta la frecuencia con que se ha tenido acceso al mismo. Por ejemplo, puede establecer que un elemento expire a las 6:00 p.m. o al cabo de cuatro horas.

Dependencias

Si lo desea, puede establecer que el período de duración de un elemento en caché dependa de otros elementos de la aplicación, como archivos o bases de datos. Cuando el elemento del que depende un elemento de la memoria caché cambia, ASP.NET lo quita de ésta. Por ejemplo, si su sitio Web muestra un informe creado por la aplicación a partir de un archivo XML, puede colocar dicho informe en caché y configurarlo para que dependa del archivo XML. Cuando el archivo XML cambie, ASP.NET quitará el informe de la memoria caché. Cuando su código solicite el informe, determinará en primer lugar si el informe está en caché, y si no está, lo volverá a crear. De este modo, siempre estará disponible una versión actualizada del informe.

El almacenamiento en caché de ASP.NET admite el uso de las dependencias descritas en la tabla siguiente.

Dependencia

Descripción

Dependencia de clave

Los elementos de la memoria caché de aplicaciones se almacenan en pares de clave y valor. La dependencia de clave permite que un elemento sea dependiente de la clave de otro elemento de la memoria caché de la aplicación. Cuando se quita el elemento original, también se quita el elemento que tiene la dependencia de clave. Por ejemplo, podría agregar un elemento de caché denominado ReportsValid y, a continuación, almacenar en caché varios informes dependientes de la clave ReportsValid. Cuando se quite el elemento ReportsValid, también se quitarán todos los informes dependientes almacenados en caché.

Dependencia de archivo

Un elemento de la memoria caché depende de un archivo externo. Si se modifica o se elimina dicho archivo, se quita el elemento almacenado en caché.

Dependencia de SQL

Un elemento de la memoria caché depende de los cambios realizados en una tabla de base de datos de Microsoft SQL Server 2005, SQL Server 2000 o SQL Server 7.0. En SQL Server 2005, un elemento puede depender de una fila de una tabla. Para obtener más información, vea Almacenar en caché en ASP.NET con la clase SqlCacheDependency.

Dependencia de agregado

Un elemento de la memoria caché depende de múltiples elementos a través del uso de la clase AggregateCacheDependency. Si cambia cualquiera de las dependencias, el elemento se quita de la memoria caché.

Dependencia personalizada

Un elemento de la memoria caché se configura con una dependencia creada en su propio código. Por ejemplo, puede crear una dependencia de caché de servicio Web personalizada que quite datos de la memoria caché cuando una llamada a un servicio Web tenga como resultado un valor determinado.

Notificación de eliminación de elementos de la memoria caché de aplicaciones

Si lo desea, puede recibir una notificación cuando un elemento se quita de la memoria caché de aplicaciones. Por ejemplo, si existe un elemento cuya creación consume un tiempo de procesamiento considerable, puede recibir una notificación cuando dicho elemento se quite de la memoria caché a fin de poder reemplazarlo inmediatamente. En consecuencia, la próxima vez que se solicite el elemento, el usuario no tendrá que esperar a que se procese. Para obtener más información, vea Cómo: Notificar a una aplicación cuando se quita un elemento de la caché.

Vea también

Tareas

Cómo: Almacenar en caché el resultado de las páginas con dependencias de archivos

Conceptos

Almacenar en caché páginas ASP.NET

Almacenar en caché datos de la aplicación

Almacenar en caché en ASP.NET con la clase SqlCacheDependency