用了緩衝,其實就是由原來的:響應->執行->送顯,變成: 響應->送顯。中間的“執行”就省掉了,提高了效率。一般有四種類型的緩衝技術。
一.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了。