ObjectDataSource.CacheDuration 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置以秒为单位的一段时间,数据源控件就在这段时间内缓存 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
属性值
ObjectDataSource 将 SelectMethod 属性调用的结果缓存的秒数。 默认值为 0。 该值不能为负数。
- 属性
示例
本部分包含两个代码示例。 第一个代码示例演示对象 ObjectDataSource 如何支持缓存。 第二个代码示例演示如何实现返回对象以使用ObjectDataSource对象进行缓存的包装方法DataSet。
下面的代码示例演示控件 ObjectDataSource 如何支持缓存。 若要启用缓存,必须实现检索由属性标识 SelectMethod 的数据的方法,以将数据作为 DataSet 对象返回。 在此示例中,属性EnableCaching设置为 ,并且CacheDuration设置了属性CacheExpirationPolicytrue
。 缓存 ObjectDataSource 属性返回 SelectMethod 30 秒的数据。
<%@ 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>
下面的代码示例演示如何实现返回对象以使用ObjectDataSource控件启用缓存的包装方法DataSet。 在类的 EmployeeLogic
基实现中,该方法 GetAllEmployees
返回一个 ArrayList 对象。 添加名为GetAllEmployeesAsDataSet
的包装方法,而不是完全重构对象以ObjectDataSource在Web Forms页上使用。该方法将返回一组NorthwindEmployee
数据作为一个DataSet。
此代码示例是为类提供的大型示例的 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
注解
该 ObjectDataSource 控件支持数据缓存。 在缓存数据时,调用 Select 该方法从缓存中检索数据,而不是从使用该数据的业务对象 ObjectDataSource 中检索数据。 缓存过期后, Select 该方法从业务对象检索数据,然后再次缓存数据。
当属性设置为true
该属性并且CacheDuration该属性设置为大于 0 的值时EnableCaching,该ObjectDataSource控件会自动缓存数据,该值指示缓存在丢弃缓存项之前存储数据的秒数。 值为 0 表示无限长缓存。
缓存由持续时间和 CacheExpirationPolicy 设置的组合进行监管。 CacheExpirationPolicy如果属性设置为Absolute值,则ObjectDataSource对方法的第一次调用Select缓存数据并将其保存在内存中,最多是属性指定的CacheDuration时间量。 如果需要内存,可以在持续时间前释放数据。 然后,在对方法的下一次调用 Select 期间刷新缓存。 CacheExpirationPolicy如果属性设置为Sliding值,则数据源控件在对方法的第一次调用Select中缓存数据,但会重置它在对该方法的每个后续调用Select中保存缓存的时间窗口。 如果自上次调用Select该方法以来没有等于属性的活动CacheDuration,缓存将过期。