ObjectDataSource.CacheDuration 属性

定义

获取或设置以秒为单位的一段时间,数据源控件就在这段时间内缓存 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

属性值

ObjectDataSourceSelectMethod 属性调用的结果缓存的秒数。 默认值为 0。 该值不能为负数。

属性

示例

本部分包含两个代码示例。 第一个 ObjectDataSource 代码示例演示对象如何支持缓存。 第二个代码示例演示如何实现一个包装器方法,该方法返回 一个 DataSet 对象,以使用 对象 ObjectDataSource 启用缓存。

下面的代码示例演示控件如何 ObjectDataSource 支持缓存。 若要启用缓存,必须实现检索由 属性标识 SelectMethod 的数据的方法,以将数据作为 DataSet 对象返回。 在此示例中, EnableCaching 属性设置为 true,并 CacheDuration 设置了 和 CacheExpirationPolicy 属性。 缓存 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>

下面的代码示例演示如何实现包装器方法,该方法返回 DataSet 对象以使用 控件启用缓存 ObjectDataSource 。 在 类的 EmployeeLogic 基实现中 GetAllEmployees , 方法返回 对象 ArrayList 。 添加了一个名为 GetAllEmployeesAsDataSet 的包装器方法,该方法将返回一组数据作为 DataSet,而不是完全重构对象以使用 ObjectDataSource Web 窗体页上的 NorthwindEmployee

此代码示例是为 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 方法从业务对象中检索数据,然后再次缓存数据。

当 属性设置为 trueCacheDuration 属性设置为大于 0 的值时EnableCaching,控件ObjectDataSource会自动缓存数据,该值指示缓存在丢弃缓存项之前存储数据的秒数。 值为 0 表示缓存无限长。

缓存由持续时间和 CacheExpirationPolicy 设置的组合进行调节。 如果 属性 CacheExpirationPolicy 设置为 Absolute 值,则 ObjectDataSource 在第一次调用 Select 方法时缓存数据,并将其保留在内存中,最多是 属性指定的 CacheDuration 时间量。 如果需要内存,可以在持续时间之前释放数据。 然后在下一次调用 Select 方法期间刷新缓存。 如果 属性 CacheExpirationPolicy 设置为 Sliding value,则数据源控件在首次调用 Select 方法时缓存数据,但在每次对 方法的后续调用 Select 中,数据源控件将重置保留缓存的时间窗口。 如果自上次调用 Select 方法以来没有活动的时间等于 CacheDuration 属性,则缓存将过期。

适用于

另请参阅