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