緩存是把應用程式中的需要頻繁、快速通路的資料儲存在記憶體中的程式設計技術,通常用來提高網絡的響應速度。在ASP.NET中使用Cache類來管理緩存。下面詳述控件級資料緩存功能和頁面級資料緩存功能的實作:
(1)資料庫緩存依賴
資料庫緩存依賴由SqlCacheDependency類管理;
資料庫緩存依賴的優點:
1、提高資料呈現速度,每次擷取資料後,系統根據使用者設定的緩存時間,在有效期内,将資料儲存在本地,使用者請求資料結果時,系統不是從資料庫中擷取,而是直接從本地擷取,進而提高了資料的擷取速度。
2、單獨緩存頁面中的某一控件,而不影響其他資料的變化。為了保證頁面中資料的準确性,通常隻需要緩存資料控件,其他控件的資料時随時變化的。
3、資料便發生更改時,自動删除緩存項,并向Cache中添加新版本的項,這是資料庫緩存依賴最重要的一個特點。
4、與SQL緩存依賴項關聯的資料庫操作比較簡單,不會給伺服器帶來很高的處理成本。
執行個體:
(1)開啟頁面調試功能:
建立一個網站,點選調試(或按F5),跳出“未啟用調試對話框”,預設點選“确定”(不跳出對話框則作罷)。關閉空白網頁,可以看到解決資料總管出現了web配置檔案,打開,在“System.web”節點下,添加開啟資料庫緩存依賴的代碼如下:
<caching>
<sqlCacheDependency enabled="true" pollTime="1000">
</sqlCacheDependency>
</caching>
其中:enabled屬性表示是否開啟資料庫緩存依賴;polltime屬性表示輪詢資料庫表的更改頻率,機關:ms;不能設定小于500ms;
(2)配置緩存依賴的資料庫
為保證資料庫發生變化,應用程式能夠及時更新緩存版本,必須在配置檔案中指明程式所依賴的資料庫,配置如下:
在web.config檔案的“configuration”節點下,添加如下代碼:
<connectionStrings>
<remove name="JWInfoConnectionString"/>
<add name="JWInfoConnectionString" connectionString="Data Source=.;
Initial Catalog=JWInfo; uid=sa; pwd=123456;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
配置完資料庫連接配接後,在啟用資料庫緩存依賴的配置中添加如下代碼:
<databases>
<add connectionStringName="JWInfoConnectionString" name="JWInfo" pollTime="1000"/>
</databases>
注:為防止途中出現錯誤,請按F5運作程式;
(3)為SQL SERVER啟用緩存通知:
必須配置SQL SERVER才能就依賴資料中的更改向asp.ne提供合适的通知。
啟用VS2005指令行(開始->程式->vs2005->vs2005 Tools->vs2005指令提示,進入DOS界面)輸入:aspnet_regsql.exe,出現配置向導,進行配置;
控件級資料緩存功能:
源檔案:
<form id="form1" runat="server">
<table>
<tr>
<td style="width: 362px">
目前時間:
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</td>
</tr>
最後緩存時間:
<asp:Literal ID="Literal2" runat="server"></asp:Literal>
<td style="width: 362px; height: 213px">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="學号" DataSourceID="SqlDataSource1" Height="204px" Width="361px">
<Columns>
<asp:BoundField DataField="學号" HeaderText="學号" ReadOnly="True" SortExpression="學号" />
<asp:BoundField DataField="姓名" HeaderText="姓名" SortExpression="姓名" />
<asp:BoundField DataField="性别" HeaderText="性别" SortExpression="性别" />
<asp:BoundField DataField="班級編号" HeaderText="班級編号" SortExpression="班級編号" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:JWInfoConnectionString %>"
SelectCommand="SELECT [學号], [姓名], [性别], [班級編号] FROM [學生資訊]"
CacheDuration="30" EnableCaching="true" OnSelected="SqlDataSource_Selected"></asp:SqlDataSource>
</table>
</form>
其中:CacheDuration表示緩存資料時間,機關:s,EnableCaching:表示在此資料源中是否啟用緩存設定。OnSelected屬性表示重新擷取資料時的事件;
cs檔案:
protected void Page_Load(object sender, EventArgs e)
{
//擷取目前時間
Literal1.Text = DateTime.Now.ToString();
//判斷是否已經有緩存時間
if (Cache["LastAccess"] != null)
{
//擷取當初的緩存時間
Literal2.Text = Cache["LastAccess"].ToString();
}
}
protected void SqlDataSource_Selected(object sender, SqlDataSourceStatusEventArgs e)
//當重新擷取資料時,顯示目前時間
Literal2.Text = DateTime.Now.ToString();
//進行時間戳的緩存
Cache["LastAccess"] = System.DateTime.Now.ToString();
點選“調試”運作,重複按F5,可看到效果;也可在資料有效期内修改資料庫中資料觀察效果;
頁面級資料緩存依賴功能:
頁面緩存屬性在HTML代碼中配置,如下:(整個頁面第二行)
<%@ OutputCache Duration="20" VaryByParam="None" %>
其餘,源檔案幾乎與上一個示例相同,隻是去掉sqlDataSource1中的控件級緩存屬性,因為這裡實作的是頁面緩存功能;
如下:
SelectCommand="SELECT [學号], [姓名], [性别], [班級編号] FROM [學生資訊]" OnSelected="SqlDataSource1_Selected"></asp:SqlDataSource>
.cs檔案:
同上一個執行個體的cs檔案,無需改動;
所謂“依賴”:指一方發生變化後,另一方也不得不變化,這樣才保證資料庫中的資料和頁面上顯示的資料一緻、同步。
實際情況可将兩種機制聯合使用,使頁面加載速度增快!
原文釋出時間為:2009-10-14
本文作者:vinoYang