Compartir a través de


Almacenar datos en memoria caché utilizando controles de origen de datos

Actualización: noviembre 2007

Los controles de origen de datos proporcionan servicios de datos a los controles enlazados a datos como los controles GridView, FormView y DetailsView. Estos servicios incluyen datos de almacenamiento en caché para ayudar a mejorar el rendimiento de aplicaciones en las que los datos no cambian con frecuencia.

Para almacenar en memoria caché datos mediante los controles SqlDataSource o AccessDataSource, debe establecer la propiedad DataSourceMode de esos controles en DataSet. El control ObjectDataSource puede almacenar en memoria caché objetos devueltos por el objeto de negocios subyacente. Sin embargo, no debe almacenar en memoria caché objetos que contengan recursos o que mantengan estados que no pueden compartir con varias solicitudes, como un objeto DataReader abierto.

Habilitar el almacenamiento en caché con control de origen de datos

El almacenamiento en caché no está habilitado de forma predeterminada para los controles de origen de datos, pero se puede habilitar estableciendo la propiedad EnableCaching del control en true. Los datos almacenados en memoria caché se actualizan en función del número de segundos que especifique utilizando la propiedad CacheDuration.

Puede refinar aún más el comportamiento de un control de origen de datos estableciendo su propiedad como CacheExpirationPolicy. Al establecer el valor de la propiedad en Absolute, se obliga a actualizar la caché cuando se excede el valor CacheDuration. Si la propiedad CacheExpirationPolicy se establece en Sliding, sólo se actualiza la caché cuando se ha superado el valor de CacheDuration desde la última vez en que se tuvo acceso al elemento almacenado en la caché.

Nota importante:

Se recomienda establecer la propiedad EnableCaching como false cuando la suplantación del cliente esté habilitada y los resultados del origen de datos se recuperen en función de la identidad del cliente. Si el almacenamiento en caché está habilitado, todos los usuarios pueden ver los datos almacenados en caché para un único usuario y es posible que se exponga información importante a una fuente no deseada. La suplantación del cliente está habilitada cuando el atributo impersonate del elemento de configuración identity está establecido en true y la identificación anónima está deshabilitada para la aplicación en el servidor Web.

En el ejemplo de código siguiente se muestra un control SqlDataSource configurado para actualizar los datos cada 20 segundos:

<%@ Page language="VB" %>

<!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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<%@ Page language="C#" %>

<!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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </columns>
            </asp:GridView>

        </form>
    </body>
</html>
<!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 >
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" >

            <asp:SqlDataSource
                id="SqlDataSource1"
                
                DataSourceMode="DataSet"
                ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
                EnableCaching="True"
                CacheDuration="20"
                SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees">
            </asp:SqlDataSource>

            <asp:GridView
                id="GridView1"
                
                AutoGenerateColumns="False"
                DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                    <asp:BoundField HeaderText="Last Name" DataField="LastName" />
                    <asp:BoundField HeaderText="Title" DataField="Title" />
                </Columns>
            </asp:GridView>

        </form>
    </body>
</html>

Escenarios avanzados del almacenamiento en caché

Si está utilizando el control SqlDataSource con el proveedor System.Data.SqlClient, puede aprovechar la clase SqlCacheDependency para garantizar que los datos almacenados en caché se actualicen únicamente cuando la tabla de origen de datos se modifique. Para obtener más información, vea Almacenar datos en caché con el control SqlDataSource.

Vea también

Otros recursos

Controles de servidor Web de orígenes de datos