Asp.net 緩存技術2

用了緩存,其實就是由原來的:響應->執行->送顯,變成: 響應->送顯。中間的“執行”就省掉了,提高了效率。一般有四種類型的緩存技術。
     
     一.Output Caching
     由於IIS的一些特性,默認情況下Output Cache是打開的,但是要對某些請求進行緩存,還需要開發者進行定製,而且默認情況下,
Output Cache 會被緩存到硬盤上,我們可以通過修改DiskCacheable的屬性來設置其是否緩存,還可以通過Web config裏配置緩存文件的大小。

<%@ OutputCache Duration="3600" VaryByParam="state"  DiskCacheable="true" %>

一般用硬盤緩存是考慮到頁面送顯的數據比較大,相對內存緩存來說,它的容量大,但是訪問速度慢點,如果把週期設太短,
使用硬盤緩存的效率就不大好。對於Output Cache的定製,有兩種方法,一種是基於底層的API技術,一種是基於高層的@OutputCaching:

      1.基於高層的@OutputCaching

      A.由參數改變緩存內容:有些時候我們需要根據用戶的請求來生成頁面,但是用戶的請求只有有限的幾種組合,這個時候就可以根據用戶
請求來生成幾種緩存頁面,來進行緩存。

<%@ OutputCache Duration = "60" VaryByParam = "state" %>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server">
                <SelectParameters>
                    <asp:QueryStringParameter Name="state" QueryStringField="state" DefaultValue="CA" />
                </SelectParameters>
            </asp:SqlDataSource>

      B.回調緩存:可以針對每個請求在頁面中插入動態的部分,以彌補單獨使用靜態緩存的不足:
動態的部分用Substitution控件,Substitution控件是一個容器

 <asp:Substitution ID="Substitution1" runat="server" MethodName ="" />

MethodName 裏面放入要調用的方法內容。
       2. 使用API定製緩存:
  通過設置System.Web.HttpCachePolicy屬性來進行配置

<%@ OutputCache Duration="60" VaryByParam="none"  %>

就可以寫成      

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
        Response.Cache.SetCacheability(HttpCacheability.Public);


     二.Fragment Caching
     作爲Output的緩存的附加功能,還提供一種緩存技術,專門用於緩存用戶控件。在用戶控件中設置:

<%@ OutputCache Duration="60" VaryByParam="none"  %>

但在引用用戶控件的頁面不設置緩存。這樣的話,頁面中除了用戶控件是靜態的,其他都是動態的。
緩存用戶空間同樣還可以使用控件作爲參數來源。通過指定控件作爲緩存控件的數據來源,可以達到緩存控件數據的目的,和上面一樣。

     三.Data Caching
     Asp.net提供了一種非常快捷的方法進行數據庫緩存,用戶可以非常簡單方便的對頁面變量進行緩存。並以此提高程序效率。一個頁面
變量的緩存生命週期與應用程序的緩存生命週期相同
實現是把數據放在Cache中,如:

        source = new DataView(ds);
        Cache("MyCache") = source;

MyCache這個變量其實就是一個XML文件。

     四.SQL Caching
     通過配置數據庫連接池,只有當數據庫數據被改變的時候,緩存纔會改變。
     開個DOS窗口: 
              C:\>dir aspnet_regsql.exe/s ——這個文件是專門註冊SQL連接池的,它對SQL Sever 7.0以上都有專門的支持,我們通過寫
一些專門的語句來配置這個註冊連接池,可以把連接池和本地的應用程序(Asp.net服務器,即IIS)做一個連接。連接池只能監視有限的幾個庫,
不然連接池的負載太大。使用SQL Caching:
      先註冊,如: aspnet_regsql.exe-S".\SQLExpress"-E-d"pubs"-ed
                                aspnet_regsql.exe-S".\SQLExpress"-E-d"pubs"-et-t"authors"
       其中:- S".\SQLExpress" 表示要使用的SQL Server實例爲".\SQLExpress"。-E 表示使用當前windows憑證進行身份驗證。-d"pubs" 
表示用於應用程序服務的數據庫名稱叫"pubs"。-ed表示爲SQL 緩存依賴項啓用數據庫。-et 表示爲SQL 緩存依賴項啓用表。-t"authors"表的名稱爲"authors"。
       然後頁面上:
<%@ OutputCache Duration="99999999" VaryByParam="none" SqlDependency="Pubs.Authors"  %>

就OK了。

轉自:http://www.cnblogs.com/lovemyth/archive/2007/02/01/636359.html

發佈了1 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章