Esta documentación está archivada y no tiene mantenimiento.

ControlCachePolicy (Clase)

Actualización: noviembre 2007

Proporciona acceso mediante programación a la configuración de la caché de resultados de un control de usuario de ASP.NET.

Espacio de nombres:  System.Web.UI
Ensamblado:  System.Web (en System.Web.dll)

[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class ControlCachePolicy
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public final class ControlCachePolicy
public final class ControlCachePolicy

Los desarrolladores utilizan la clase ControlCachePolicy en escenarios de programación de controles de usuario para especificar la configuración de almacenamiento en caché de resultados para los controles de usuario (archivos .ascx). ASP.NET incrusta los controles de usuario en una instancia BasePartialCachingControl. La clase BasePartialCachingControl representa un control de usuario que tiene habilitado el almacenamiento en caché de los resultados. Cuando se tiene acceso a la propiedad BasePartialCachingControl.CachePolicy de un control PartialCachingControl, siempre se recibirá un objeto ControlCachePolicy válido. No obstante, si se tiene acceso a la propiedad UserControl.CachePolicy de un control UserControl, se recibirá un objeto ControlCachePolicy válido sólo si el control de usuario ya está contenido en un control BasePartialCachingControl. Si no lo está, el objeto ControlCachePolicy devuelto por la propiedad producirá excepciones cuando se intente manipular, porque no tiene una clase BasePartialCachingControl asociada. Para determinar si una instancia de UserControl admite el almacenamiento en caché sin generar excepciones, inspeccione la propiedad SupportsCaching.

El uso de la clase ControlCachePolicy es una de las diversas maneras con que se puede habilitar el almacenamiento en caché de los resultados. En la lista siguiente se describen métodos que se pueden usar para habilitar el almacenamiento en caché de los resultados:

  • Use la directiva @ OutputCache para habilitar el almacenamiento en caché de los resultados en escenarios declarativos.

  • Utilice el atributo PartialCachingAttribute para habilitar el almacenamiento en caché de un control de usuario en un archivo de código subyacente.

  • Utilice la clase ControlCachePolicy para especificar la configuración de la memoria caché en escenarios de programación en los que se trabaje con instancias de BasePartialCachingControl que se hayan habilitado para almacenamiento en caché utilizando uno de los métodos anteriores y se hayan cargado dinámicamente utilizando el método TemplateControl.LoadControl. Una instancia de ControlCachePolicy sólo se puede manipular correctamente entre las fases Init y PreRender del ciclo de vida del control. Si se modifica un objeto ControlCachePolicy después de la fase PreRender, ASP.NET produce una excepción, porque los cambios realizados después de representar el control no afectan realmente a la configuración de la memoria caché (un control se almacena en caché durante la fase Render). Finalmente, una instancia de control de usuario (y, por consiguiente, su objeto ControlCachePolicy) sólo está disponible para su manipulación mediante programación cuando se representa realmente.

En el siguiente ejemplo de código se muestra cómo un control de usuario se puede cargar dinámicamente y manipular mediante programación en tiempo de ejecución. El atributo PartialCachingAttribute se aplica a un control de usuario denominado SimpleControl, lo que significa que el control de usuario está contenido en un control PartialCachingControl en tiempo de ejecución. La configuración del almacenamiento en caché del objeto SimpleControl se puede manipular mediante programación a través de su objeto ControlCachePolicy asociado, que está disponible mediante una referencia al control PartialCachingControl que lo contiene. En este ejemplo, la propiedad Duration se examina durante la inicialización de la página y se modifica utilizando los métodos SetSlidingExpiration y SetExpires si se cumplen ciertas condiciones.

<%@ Page Language="C#" %>
<%@ Reference Control="SimpleControl.ascx" %>
<script language="C#" runat="server">

// The following example demonstrates how to load a user control dynamically at run time, and
// work with the ControlCachePolicy object associated with it.

// Loads and displays a UserControl defined in a seperate Logonform.ascx file.
// You need to have "SimpleControl.ascx" file in 
// the same directory as the aspx file. 

void Page_Init(object sender, System.EventArgs e) {

    // Obtain a PartialCachingControl object which wraps the 'LogOnControl' user control.
    PartialCachingControl pcc = LoadControl("SimpleControl.ascx") as PartialCachingControl;        

    // If the control is slated to expire in greater than 60 Seconds
    if (pcc.CachePolicy.Duration > TimeSpan.FromSeconds(60) ) 
    {        
        // Make it expire faster. Set a new expiration time to 30 seconds, and make it
        // an absolute expiration if it isnt already.        
        pcc.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(30)));
        pcc.CachePolicy.SetSlidingExpiration(false);
    }                    
    Controls.Add(pcc);
}
</script>


En el ejemplo de código siguiente se muestra el uso del control de usuario SimpleControl desde una página de formularios Web Forms. Para ejecutar este ejemplo correctamente, asegúrese de que el archivo del control de usuario (.ascx), su archivo de código subyacente (.cs o .vb) y la página de formularios Web Forms donde se aloja el control de usuario (.aspx) están en el mismo directorio.

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

[PartialCaching(100)]
public partial class SimpleControl : System.Web.UI.UserControl
{    
    protected void Page_Load(object sender, EventArgs e)
    {
        ItemsRemaining.Text = GetAvailableItems().ToString();
        CacheTime.Text = DateTime.Now.ToLongTimeString();
    }

    private int GetAvailableItems()
    {
        SqlConnection sqlConnection = new SqlConnection
            ("Initial Catalog=Northwind;Data Source=localhost;Integrated Security=SSPI;");
        SqlCommand sqlCommand = sqlConnection.CreateCommand();
        sqlCommand.CommandType = CommandType.StoredProcedure;
        sqlCommand.CommandText = "GetRemainingItems";
        sqlConnection.Open();
        int items = (int)sqlCommand.ExecuteScalar();
        sqlConnection.Close();
        return items;
    }
}


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SimpleControl.ascx.cs" Inherits="SimpleControl" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
<form id="Form1" runat="server">
<table cellspacing="15">
<tr>
<td><b>Available items: </b></td>
<td>
    <asp:Label ID="ItemsRemaining" runat="server" Text="Label"></asp:Label>
</td>
</tr>
<tr>
<td><b>As of: </b></td>
<td>
    <asp:Label ID="CacheTime" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</table>
</form>
</body>
</html>


System.Object
  System.Web.UI.ControlCachePolicy

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0
Mostrar: