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 です。 この値を負にすることはできません。

属性

このセクションには、2 つのコード例が含まれています。 最初のコード例は、オブジェクトがキャッシュを ObjectDataSource サポートする方法を示しています。 2 番目のコード例では、オブジェクトを返すラッパー メソッドを実装して、 DataSet オブジェクトを使用したキャッシュを有効にする方法を ObjectDataSource 示します。

次のコード例は、コントロールがキャッシュを ObjectDataSource サポートする方法を示しています。 キャッシュを有効にするには、 プロパティによって識別されるデータを取得する メソッドを SelectMethod 実装して、データをオブジェクトとして DataSet 返す必要があります。 この例では、 プロパティが EnableCachingtrue設定され、 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 返します。 オブジェクトを完全にリファクタリングしてWeb Forms ページで を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 ビジネス オブジェクトからデータを取得し、データをもう一度キャッシュします。

コントロールはObjectDataSource、 プロパティが にtrue設定され、 CacheDuration プロパティが 0 より大きい値に設定されている場合EnableCachingにデータを自動的にキャッシュします。これは、キャッシュ エントリが破棄されるまでにキャッシュがデータを格納する秒数を示します。 値 0 は、無限に長いキャッシュを示します。

キャッシュは、期間と CacheExpirationPolicy 設定の組み合わせによって規制されます。 プロパティが CacheExpirationPolicy 値に Absolute 設定されている場合、 ObjectDataSource メソッドの最初の呼び出し Select でデータがキャッシュされ、最大で プロパティで指定された時間のメモリ内に CacheDuration 保持されます。 メモリが必要な場合は、期間の前にデータが解放される可能性があります。 その後、 メソッドの次の呼び出し中にキャッシュが Select 更新されます。 プロパティが CacheExpirationPolicy value に Sliding 設定されている場合、データ ソースコントロールはメソッドの最初の呼び出しでデータを Select キャッシュしますが、メソッドの後続の呼び出しごとにキャッシュを保持する時間枠を Select リセットします。 メソッドの最後の呼び出し以降に、 プロパティと等しい CacheDuration 時間のアクティビティがない場合、キャッシュの有効期限が Select 切れます。

適用対象

こちらもご覧ください