ObjectDataSource.CacheDuration 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定資料來源控制項快取 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
, GetAllEmployees
方法會傳 ArrayList 回 物件。 新增名為 GetAllEmployeesAsDataSet
NorthwindEmployee
DataSet的包裝函式方法,而不是完全重構 物件以在 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 屬性的活動,快取就會過期。