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