Cómo controlar el almacenamiento en caché de resultados de páginas en ASP.NET mediante Visual C# .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 308375 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E308375
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se demuestra cómo usar la directiva @ OutputCache para controlar el almacenamiento en caché de resultados de páginas en ASP.NET con Visual C# .NET. Puede usar esta técnica para almacenar en caché las páginas del sitio a las que se tenga acceso con más frecuencia, lo que puede aumentar sustancialmente el rendimiento del servidor Web. El rendimiento suele medirse en solicitudes por segundo. Aunque en el ejemplo de código de este artículo se demuestra cómo usar los atributos Duration y VaryByParam, el artículo también incluye una breve descripción de otros enfoques que puede usar con la directiva @ OutputCache.

NOTA: No es objetivo de este artículo describir con detalle todos los atributos de la directiva @ OutputCache y sus posibles usos. Para obtener más información al respecto, remítase a la sección Referencias.


Requisitos

  • Microsoft Windows 2000 o Windows XP
  • Microsoft .NET Framework
  • Microsoft Internet Information Server (IIS)
  • Microsoft ASP.NET

Introducción a la directiva @ OutputCache

Para utilizar la directiva @ OutputCache para controlar el almacenamiento en caché de resultados de páginas, simplemente hay que agregar la directiva a la parte superior de la página. El método Page.InitOutputCache traduce la directiva en los métodos de la clase HttpCachePolicy.

La directiva @ OutputCache incluye los siguientes atributos y opciones:
  • Duration: este atributo especifica cuánto tiempo se almacena un elemento en la caché. El valor de Duration se muestra en segundos.
  • VaryByParam: este atributo determina las entradas de la caché con los parámetros Get o Post. Por ejemplo, si una variable QueryString denominada testVal se establece para el atributo VaryByParam, cada solicitud de página que contenga un valor diferente para testVal se almacena en caché en una página diferente. En el código siguiente se ilustra la sintaxis del atributo VaryByParam:
    <%@ OutputCache Duration="Seconds" VaryByParam="testVal"%>
    						
    NOTA: puede especificar un asterisco (*) de modo que se almacenen en caché las diferentes versiones del elemento. Además, puede especificar "none" si sólo existe una versión de un elemento en la caché.
  • Location: este atributo determina dónde se debe almacenar en caché el elemento. Puede especificar las ubicaciones siguientes:
    • Any
    • Client
    • Downstream
    • Server
    • None

    En el código siguiente se ilustra la sintaxis del atributo Location:
    <%@ OutputCache Duration="Seconds" Location="Client" %>
    					
  • VaryByCustom: este atributo contiene el valor predeterminado Browser, que significa que se almacena en caché una instancia diferente de un elemento para cada versión del explorador que la solicite. Por ejemplo, tanto Microsoft Internet Explorer 5 como Internet Explorer 5.5 solicitan el elemento. Cuando VaryByCustom se establece en Browser, existe una entrada de la caché para cada versión del explorador. No puede proporcionar una cadena para controlar el almacenamiento en caché de otros escenarios personalizados. La cadena no tiene ningún significado a menos que proporcione código para invalidar el método HttpApplication.GetVaryByCustomString en el archivo Global.asax.

    En el código siguiente se ilustra la sintaxis del atributo VaryByCustom:
    <%@ OutputCache Duration="Seconds" VaryByCustom="string" %>
    					
  • VaryByHeader: este atributo permite especificar un valor de encabezado HTTP concreto como criterio para determinar diferentes entradas de la caché. En el código siguiente se ilustra la sintaxis del atributo VaryByHeader:
    <%@ OutputCache Duration="60" VaryByHeader="Accept-Language" %>
    					

Pasos para crear el ejemplo Duration de @ OutputCache

El procedimiento siguiente demuestra cómo usar el atributo Duration para que el almacenamiento en caché de resultados de páginas especifique cuánto tiempo conservar allí un elemento.
  1. Cree un nuevo proyecto de aplicación Web de Visual Basic ASP.NET de la forma siguiente:
    1. Abra Visual Studio .NET.
    2. En el menú Archivo, seleccione Nuevo y haga clic en Proyecto.
    3. En el cuadro de diálogo Nuevo proyecto, haga clic en Proyectos de Visual C# bajo Tipos de proyecto y haga clic en Aplicación Web ASP.NET bajo Plantillas. En el cuadro de texto Nombre, escriba OutputCacheDemo y, después, haga clic en Aceptar.
  2. Cree una nueva página .aspx en Visual Studio .NET de la forma siguiente:
    1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo del proyecto, haga clic en Agregar y, después, haga clic en Agregar Web Forms.
    2. En el cuadro de texto Nombre, escriba OutputCacheDuration.aspx y, a continuación, haga clic en Abrir.
  3. Elimine el código predeterminado que Visual Studio .NET agrega a la página.
  4. Resalte el código siguiente, haga clic con el botón secundario del mouse en el mismo y, a continuación, haga clic en Copiar. En Visual Studio .NET, haga clic en Pegar como HTML en el menú Edición para pegar el código en la página .aspx:
    <%@ OutputCache Duration="20" VaryByParam="none"%>
    <HTML>
       <HEAD>
       <script language="C#" runat="server">
       void Page_Load(object sender, EventArgs e) 
       {	
          Label1.Text = "Time: " + DateTime.Now.TimeOfDay.ToString();
       }
       </script>
       </HEAD>
       <body>
          <STRONG>@ OutputCache Duration Sample</STRONG>
          <hr>
          <br>
          <asp:Label id="Label1" runat="server">Label</asp:Label>
          <br>
       </body>
    </HTML>
    					
  5. En el menú Archivo, haga clic en Guardar OutputCacheDuration.aspx para guardar la página.
  6. En el menú Generar en el Entorno de desarrollo integrado (IDE), haga clic en Generar.
  7. Para ejecutar el ejemplo, haga clic con el botón secundario del mouse en OutputCacheDuration.aspx en el Explorador de soluciones y haga clic en Ver en el explorador.
  8. Cuando la página aparezca en el explorador, tome nota del tiempo que aparece en la etiqueta.
  9. Actualice la página en el explorador. Observe que el tiempo es el mismo que antes. Si actualiza la página después de que transcurran los veinte segundos con que está configurada la duración, se muestra una versión de la página recién almacenada en caché.

    NOTA: si ve la página en un explorador externo, puede presionar la tecla F5 para actualizar la página. Si ve la página en un explorador interno del IDE de Visual Studio .NET, puede hacer clic con el botón secundario del mouse en la página y hacer clic en Actualizar para actualizar la página.

Pasos para crear el ejemplo VaryByParam de @ OutputCache

El procedimiento siguiente demuestra cómo usar el atributo VaryByParam para que el almacenamiento en caché de resultados de páginas permita que existan versiones diferentes de una página en caché según el valor de una de sus variables QueryString.
  1. Cree una nueva página .aspx en Visual Studio .NET de la forma siguiente:
    1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo del proyecto, haga clic en Agregar y, después, haga clic en Agregar Web Forms.
    2. En el cuadro de texto Nombre, escriba OutputCacheVaryByParam.aspx y, a continuación, haga clic en Abrir.
  2. Elimine el código predeterminado que Visual Studio .NET agrega a la página de forma predeterminada.
  3. Resalte el código siguiente, haga clic con el botón secundario del mouse en el mismo y, a continuación, haga clic en Copiar. En Visual Studio .NET, haga clic en Pegar como HTML en el menú Edición para pegar el código en la página .aspx:
    <%@ OutputCache Duration="20" VaryByParam="testVal"%>
    <HTML>
       <HEAD>
          <script language="C#" runat="server">
       void Page_Load(object sender, EventArgs e) 
       {	
          Label1.Text = "Time: " + DateTime.Now.TimeOfDay.ToString();
       }
       </script>
       </HEAD>
       <body>
          <P>
             <STRONG>@ OutputCache VaryByParam Sample</STRONG>
          </P>
          <P>
             <hr>
          </P>
          <P>
             <br>
             <asp:Label id="Label1" runat="server"></asp:Label>
             <br>
             <hr>
             <a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=123">testVal(123)</a>
             <br>
             <a href=http://yourservername/OutputCacheDemo/OutputCacheVaryByParam.aspx?testVal=345">testVal(345)</a>
          </P>
       </body>
    </HTML>
    						
    NOTA: debe modificar los dos hipervínculos del código anterior para reflejar el nombre del servidor Web. Además, puede observar que el atributo VaryByParam está configurado para variar, según el valor de la variable testVal de QueryString. Esto hace que el resultado de la página se almacene en caché siempre que el valor de la variable QueryString para testVal sea el mismo.
  4. En el menú Archivo, haga clic en Guardar OutputCacheVaryByParam.aspx para guardar la página.
  5. En el menú Generar del IDE, haga clic en Generar.
  6. Para ejecutar el ejemplo, haga clic con el botón secundario del mouse en OutputCacheVaryByParam.aspx en el Explorador de soluciones y haga clic en Ver en el explorador.
  7. Cuando la página aparezca en el explorador, haga clic en testVal(123). Esto hace que el explorador vuelva a la página pero con la variable testVal de QueryString establecida en "123". Tome nota del tiempo que aparece.
  8. Haga clic de nuevo en testVal(123). Observe que el tiempo es el mismo que antes. El resultado de la página se ha almacenado en caché según el valor de la variable testVal.
  9. Haga clic de nuevo en testVal(345). Observe que aparece un nuevo tiempo en la página.
  10. Haga clic de nuevo en testVal(345). Observe que el resultado de la página anterior está almacenado en la caché y se muestra en el explorador.
  11. Haga clic en testVal(123) para volver a la primera instancia. Observe que aparecen versiones diferentes de la caché de resultados de páginas, según el valor de la variable QueryString suministrado.

Solución de problemas

  • Cuando use VaryByParam, tenga en cuenta que los cambios de la variable QueryString provocan entradas adicionales en la caché.
  • Tenga presente que Duration se especifica en segundos.
  • Cuando usa VaryByCustom y reemplaza el método HttpApplication.GetVaryByCustomString en el archivo Global.asax, se utiliza la configuración predeterminada de Browser si no se encuentra ninguna correspondencia para la cadena personalizada que se proporciona con el atributo.

Referencias

Para obtener más información acerca del almacenamiento en caché de los resultados de páginas, visite los siguientes sitios Web de Microsoft:
Tutorial rápido de almacenamiento en caché de resultados de páginas GotDotNet
Kit de desarrollo de software (SDK) de Microsoft .NET Framework
http://msdn2.microsoft.com/en-us/library/ms950382.aspx

Almacenamiento en caché de páginas ASP.NET
http://msdn2.microsoft.com/en-us/library/xsbfdd8c(vs.71).aspx

@ OutputCache
http://msdn2.microsoft.com/en-us/library/hdxfb6cy(vs.71).aspx

Propiedades

Id. de artículo: 308375 - Última revisión: jueves, 24 de mayo de 2007 - Versión: 7.7
La información de este artículo se refiere a:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbcaching kbhowtomaster kbio KB308375

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com