共用方式為


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 快取。 在 類別的基底實作中 EmployeeLogicGetAllEmployees 方法會傳 ArrayList 回 物件。 新增名為 GetAllEmployeesAsDataSetNorthwindEmployeeDataSet的包裝函式方法,而不是完全重構 物件以在 Web Forms 頁面上使用 。ObjectDataSource

此程式代碼範例是針對 類別提供的較大範例的 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 方法會從商務物件擷取數據,然後再次快取數據。

ObjectDataSource 屬性設定true為 且 CacheDuration 屬性設定為大於 0 的值時EnableCaching,控件會自動快取數據,這表示快取在捨棄快取專案之前儲存數據的秒數。 值為 0 表示無限長快取。

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

適用於

另請參閱