次の方法で共有


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 フォーム ページで を操作 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 切れます。

適用対象

こちらもご覧ください