天天看點

asp.net的緩存機制

緩存是把應用程式中的需要頻繁、快速通路的資料儲存在記憶體中的程式設計技術,通常用來提高網絡的響應速度。在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