asp.net的緩衝機制

來源:互聯網
上載者:User

緩衝是把應用程式中的需要頻繁、快速存取的資料儲存在記憶體中的編程技術,通常用來提高網路的響應速度。在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,可看到效果;也可在資料有效期間內修改資料庫中資料觀察效果;

 

所謂“依賴”:指一方發生變化後,另一方也不得不變化,這樣才保證資料庫中的資料和頁面上顯示的資料一致、同步。

實際情況可將兩種機制聯合使用,使頁面載入速度增快!

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.