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

屬性值

ObjectDataSource 快取 SelectMethod 屬性引動之結果的秒數。 預設值是 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 中,方法會 GetAllEmployeesArrayList 傳回 物件。 新增名為 的包裝函式方法,而不是完全重構物件以在Web Form頁面上使用 ObjectDataSource ,而會將 GetAllEmployeesAsDataSet 一組 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 方法會從商務物件擷取資料,然後再次快取資料。

當 屬性設定為 trueCacheDuration 屬性設定為大於 0 的值時 EnableCaching ,控制項 ObjectDataSource 會自動快取資料,這表示快取在捨棄快取專案之前儲存資料的秒數。 值為 0 表示無限長快取。

快取是由持續時間和 CacheExpirationPolicy 設定的組合所規範。 CacheExpirationPolicy如果屬性設定 Absolute 為 值,則會 ObjectDataSource 在第一次呼叫 Select 方法時快取資料,並將它保留于記憶體中,最多是 屬性所 CacheDuration 指定的時間量。 如果需要記憶體,資料可能會在持續時間之前釋出。 接著,會在下一次呼叫 Select 方法時重新整理快取。 CacheExpirationPolicy如果 屬性設定為 Sliding value,則資料來源控制項會在第一次呼叫 Select 方法時快取資料,但會重設它在每個後續呼叫 Select 方法時保留快取的時間範圍。 如果自上次呼叫 Select 方法之後沒有等於 CacheDuration 屬性的活動,快取就會過期。

適用於

另請參閱