ObjectDataSource.CacheDuration Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene o establece el período de tiempo, en segundos, que el control de origen de datos almacena en memoria caché los datos recuperados por la propiedad SelectMethod.
public:
virtual property int CacheDuration { int get(); void set(int value); };
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))]
public virtual int CacheDuration { get; set; }
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.DataSourceCacheDurationConverter))>]
member this.CacheDuration : int with get, set
Public Overridable Property CacheDuration As Integer
Valor de propiedad
Número de segundos que ObjectDataSource almacena en memoria caché los resultados de una invocación de la propiedad SelectMethod. El valor predeterminado es 0. El valor no puede ser negativo.
- Atributos
Ejemplos
Esta sección contiene dos ejemplos de código. En el primer ejemplo de código se muestra cómo un ObjectDataSource objeto admite el almacenamiento en caché. En el segundo ejemplo de código se muestra cómo implementar un método contenedor que devuelve un DataSet objeto para habilitar el almacenamiento en caché con un ObjectDataSource objeto .
En el ejemplo de código siguiente se muestra cómo un ObjectDataSource control admite el almacenamiento en caché. Para habilitar el almacenamiento en caché, debe implementar el método que recupera datos, que se identifica mediante la SelectMethod propiedad , para devolver los datos como un DataSet objeto. En este ejemplo, la EnableCaching propiedad se establece true
en y las CacheDuration propiedades y CacheExpirationPolicy se establecen. Almacena ObjectDataSource en caché los datos devueltos por la SelectMethod propiedad durante 30 segundos.
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ 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>ObjectDataSource - C# Example</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:gridview
id="GridView1"
runat="server"
datasourceid="ObjectDataSource1" />
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
typename="Samples.AspNet.CS.EmployeeLogic"
selectmethod="GetAllEmployeesAsDataSet"
enablecaching="True"
cacheduration="30"
cacheexpirationpolicy="Absolute" />
</form>
</body>
</html>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %>
<%@ 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>ObjectDataSource - VB Example</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:gridview
id="GridView1"
runat="server"
datasourceid="ObjectDataSource1" />
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
typename="Samples.AspNet.VB.EmployeeLogic"
selectmethod="GetAllEmployeesAsDataSet"
enablecaching="True"
cacheduration="30"
cacheexpirationpolicy="Absolute" />
</form>
</body>
</html>
En el ejemplo de código siguiente se muestra cómo implementar un método contenedor que devuelve un DataSet objeto para habilitar el almacenamiento en caché con un ObjectDataSource control . En la implementación base de la EmployeeLogic
clase , el GetAllEmployees
método devuelve un ArrayList objeto . En lugar de refactorizar completamente el objeto para trabajar con en ObjectDataSource una página de Formularios Web Forms, se agrega un método contenedor denominado GetAllEmployeesAsDataSet
que devuelve un conjunto de NorthwindEmployee
datos como .DataSet
Este ejemplo de código es parte de un ejemplo más grande proporcionado para la clase ObjectDataSource.
//
// To support basic filtering, the employees cannot
// be returned as an array of objects, rather as a
// DataSet of the raw data values.
public static DataSet GetAllEmployeesAsDataSet () {
ICollection employees = GetAllEmployees();
DataSet ds = new DataSet("Table");
// Create the schema of the DataTable.
DataTable dt = new DataTable();
DataColumn dc;
dc = new DataColumn("FirstName", typeof(string)); dt.Columns.Add(dc);
dc = new DataColumn("LastName", typeof(string)); dt.Columns.Add(dc);
dc = new DataColumn("Title", typeof(string)); dt.Columns.Add(dc);
dc = new DataColumn("Courtesy", typeof(string)); dt.Columns.Add(dc);
dc = new DataColumn("Supervisor",typeof(Int32)); dt.Columns.Add(dc);
// Add rows to the DataTable.
IEnumerator emplEnum = employees.GetEnumerator();
DataRow row;
NorthwindEmployee ne;
while (emplEnum.MoveNext()) {
ne = emplEnum.Current as NorthwindEmployee;
row = dt.NewRow();
row["FirstName"] = ne.FirstName;
row["LastName"] = ne.LastName;
row["Title"] = ne.Title;
row["Courtesy"] = ne.Courtesy;
row["Supervisor"] = ne.Supervisor;
dt.Rows.Add(row);
}
// Add the complete DataTable to the DataSet.
ds.Tables.Add(dt);
return ds;
}
' To support basic filtering, the employees cannot
' be returned as an array of objects, rather as a
' DataSet of the raw data values.
Public Shared Function GetAllEmployeesAsDataSet() As DataSet
Dim employees As ICollection = GetAllEmployees()
Dim ds As New DataSet("Table")
' Create the schema of the DataTable.
Dim dt As New DataTable()
Dim dc As DataColumn
dc = New DataColumn("FirstName", GetType(String))
dt.Columns.Add(dc)
dc = New DataColumn("LastName", GetType(String))
dt.Columns.Add(dc)
dc = New DataColumn("Title", GetType(String))
dt.Columns.Add(dc)
dc = New DataColumn("Courtesy", GetType(String))
dt.Columns.Add(dc)
dc = New DataColumn("Supervisor", GetType(Int32))
dt.Columns.Add(dc)
' Add rows to the DataTable.
Dim emplEnum As IEnumerator = employees.GetEnumerator()
Dim row As DataRow
Dim ne As NorthwindEmployee
While emplEnum.MoveNext()
ne = CType(emplEnum.Current, NorthwindEmployee)
row = dt.NewRow()
row("FirstName") = ne.FirstName
row("LastName") = ne.LastName
row("Title") = ne.Title
row("Courtesy") = ne.Courtesy
row("Supervisor") = ne.Supervisor
dt.Rows.Add(row)
End While
' Add the complete DataTable to the DataSet.
ds.Tables.Add(dt)
Return ds
End Function 'GetAllEmployeesAsDataSet
Comentarios
El ObjectDataSource control admite el almacenamiento en caché de datos. Mientras se almacenan en caché los datos, las llamadas al Select método recuperan datos de la memoria caché en lugar del objeto de negocio con el ObjectDataSource que funciona. Cuando expira la memoria caché, el Select método recupera datos del objeto de negocio y, a continuación, vuelve a almacenar en caché los datos.
El ObjectDataSource control almacena automáticamente en caché los datos cuando la EnableCaching propiedad se establece true
en y la CacheDuration propiedad se establece en un valor mayor que 0, lo que indica el número de segundos en que la memoria caché almacena los datos antes de que se descarte la entrada de caché. Un valor de 0 indica una caché infinitamente larga.
La memoria caché está regulada por una combinación de la duración y la CacheExpirationPolicy configuración. Si la CacheExpirationPolicy propiedad se establece en el Absolute valor, almacena en caché los ObjectDataSource datos de la primera llamada al Select método y los mantiene en memoria durante, como máximo, la cantidad de tiempo especificada por la CacheDuration propiedad . Es posible que los datos se libere antes del tiempo de duración, si se necesita memoria. A continuación, la memoria caché se actualiza durante la siguiente llamada al Select método . Si la CacheExpirationPolicy propiedad se establece Sliding en valor, el control de origen de datos almacena en caché los datos de la primera llamada al Select método, pero restablece la ventana de tiempo para la que contiene la memoria caché en cada llamada posterior al Select método. La memoria caché expira si no hay ninguna actividad durante un tiempo igual a la CacheDuration propiedad desde la última llamada al Select método .