ObjectDataSource.CacheDuration プロパティ
アセンブリ: System.Web (system.web.dll 内)

Dim instance As ObjectDataSource Dim value As Integer value = instance.CacheDuration instance.CacheDuration = value
/** @property */ public int get_CacheDuration () /** @property */ public void set_CacheDuration (int value)
ObjectDataSource が SelectMethod プロパティの呼び出しの結果をキャッシュする秒数。既定値は 0 です。この値には、負の値を指定することはできません。

ObjectDataSource コントロールは、データのキャッシュをサポートしています。データがキャッシュされている間、Select メソッドの呼び出しによって、データは ObjectDataSource が使用するビジネス オブジェクトからではなく、キャッシュから取得されます。キャッシュの有効期限が切れると、Select メソッドはビジネス オブジェクトからデータを取得し、そのデータを再びキャッシュします。
EnableCaching プロパティが true に設定され、CacheDuration プロパティ (キャッシュ エントリが破棄されるまでの秒数、つまり、キャッシュにデータが格納される秒数) が 0 より大きい値に設定されている場合、ObjectDataSource コントロールはデータを自動的にキャッシュします。値 0 は、キャッシュ時間が制限されていないことを示します。
キャッシュは、存続期間と CacheExpirationPolicy 設定を組み合わせることによって規定されます。CacheExpirationPolicy プロパティを Absolute 値に設定した場合、ObjectDataSource は Select メソッドの最初の呼び出しでデータをキャッシュし、最長で CacheDuration プロパティで指定された時間、メモリ内にデータを保持します。メモリが必要になった場合、データは存続期間の途中でも解放されることがあります。この場合、キャッシュは Select メソッドが次回呼び出された時に更新されます。CacheExpirationPolicy プロパティを Sliding 値に設定した場合、データ ソース コントロールは Select メソッドの最初の呼び出しでデータをキャッシュしますが、これ以降に Select メソッドを呼び出すたびに、キャッシュを保持する時間ウィンドウをリセットします。Select メソッドの最後の呼び出しの後、CacheDuration プロパティで指定された時間と等しい時間、アクティビティがない場合は、キャッシュの有効期限が切れます。

このセクションには、2 つのコード例が含まれています。1 つ目のコード例では、ObjectDataSource オブジェクトでキャッシュをサポートする方法を示します。2 つ目のコード例では、DataSet オブジェクトを返すラッパー メソッドを実装し、ObjectDataSource オブジェクトでキャッシュを有効にする方法を示します。
ObjectDataSource コントロールでキャッシュをサポートする方法を次のコード例に示します。キャッシュを有効にするには、SelectMethod プロパティで識別されるデータ取得メソッドを実装し、データを DataSet オブジェクトとして返す必要があります。この例では、EnableCaching プロパティを true に設定し、CacheDuration プロパティと CacheExpirationPolicy プロパティを設定しています。ObjectDataSource は、SelectMethod プロパティによって返されるデータを 30 秒間キャッシュします。
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB" Assembly="Samples.AspNet.VB" %> <%@ Page language="vb" %> <html> <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>
<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %> <%@ Page language="c#" %> <html> <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.jsl" Assembly="Samples.AspNet.jsl" %> <%@ Page Language="VJ#" %> <html> <head> <title>ObjectDataSource - VJ# 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.jsl.EmployeeLogic" selectmethod="GetAllEmployeesAsDataSet" enablecaching="True" cacheduration="30" cacheexpirationpolicy="Absolute" /> </form> </body> </html>
DataSet オブジェクトを返すラッパー メソッドを実装し、ObjectDataSource コントロールでキャッシュを有効にする方法を次のコード例に示します。EmployeeLogic クラスの基本実装では、GetAllEmployees メソッドは ArrayList オブジェクトを返します。Web フォーム ページの ObjectDataSource を使用するためにオブジェクトを完全にリファクタリングする代わりに、一連の NorthwindEmployee データを DataSet として返す GetAllEmployeesAsDataSet という名前のラッパー メソッドが追加されています。
このコード例は、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 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
// // 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 static DataSet GetAllEmployeesAsDataSet() throws NorthwindDataException { ICollection employees = GetAllEmployees(); DataSet ds = new DataSet("Table"); // Create the schema of the DataTable. DataTable dt = new DataTable(); DataColumn dc; dc = new DataColumn("FirstName", String.class.ToType()); dt.get_Columns().Add(dc); dc = new DataColumn("LastName", String.class.ToType()); dt.get_Columns().Add(dc); dc = new DataColumn("Title", String.class.ToType()); dt.get_Columns().Add(dc); dc = new DataColumn("Courtesy", String.class.ToType()); dt.get_Columns().Add(dc); dc = new DataColumn("Supervisor", Int32.class.ToType()); dt.get_Columns().Add(dc); // Add rows to the DataTable. IEnumerator emplEnum = employees.GetEnumerator(); DataRow row; NorthwindEmployee ne; while (emplEnum.MoveNext()) { ne = (NorthwindEmployee)emplEnum.get_Current(); row = dt.NewRow(); row.set_Item("FirstName", ne.get_FirstName()); row.set_Item("LastName", ne.get_LastName()); row.set_Item("Title", ne.get_Title()); row.set_Item("Courtesy", ne.get_Courtesy()); row.set_Item("Supervisor", (Int32)ne.get_Supervisor()); dt.get_Rows().Add(row); } // Add the complete DataTable to the DataSet. ds.get_Tables().Add(dt); return ds; } //GetAllEmployeesAsDataSet

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- ObjectDataSource.CacheDuration プロパティのページへのリンク