尊重作者,請保留 www.it55.com 連結字樣。
前面學習了資料來源控制項和資料繫結控制項,今天我們將要學習的是:資料緩衝。
接觸過asp.net 1.x版本的朋友可能會說,這不是個新東西了。是的,資料緩衝確實不是asp.net 2.0的新產物,但是asp.net 2.0賦予資料緩衝更多屬性和方法,讓資料緩衝可以在asp.net 2.0時代大展雄風。
資料緩衝將頻繁被請求的內容存貯在伺服器端緩衝中,以便這些內容被再次請求時可以更加迅速的反應,並且很有效降低了伺服器的資源佔用,提升了程式的運行效能。
asp.net 2.0支援以下幾種緩衝方案:
1、網頁輸出快取
網頁輸出快取是一種傳統層級的相對簡單的緩衝機制。它將頁面資料緩衝在伺服器記憶體中,當有用戶端再次請求這些內容的時候,伺服器可以直接將這些頁面資料輸出,直到資料緩衝到期。
網頁輸出快取有兩種使用方法:
使用@ OutputCache指令,常見代碼如:
<%@ OutputCache Duration="60" VaryByParam="sID" Location="Any"%>
以上例子定義了網頁輸出快取有效時間為60s,60s後建立緩衝;緩衝版本因頁面傳遞的sID參數不同而不同;Location="Any"指定了。
使用網頁輸出快取API
該方法在頁面的程式部分執行,常見代碼如:
Response.Cache.SetExpires(DataTime.Now.AddSeconds(60));
上句設定頁面緩衝有效時間為60s。
關於網頁輸出快取的屬性還有很多,這裡只介紹常用的。詳細資料請參見:http://www.itgao.com/html/2007-04/19811.html
2、頁面部分緩衝
有時候我們可能並不希望把整個頁面都緩衝起來,而只是快取頁面面的某個部分。常用方法有3種:
使用@ OutputCache指令
這種方法的實質是:將需要緩衝的這部分內容做成使用者自訂控制項,然後為自訂控制項設定頁面緩衝代碼,方法同網頁輸出快取。
使用PartialCachingAttribute類
該方法在使用者控制項的程式碼後置檔案中設定控制項的緩衝配置內容如下,
[PartialCaching(20)]
public partial class NewUserControl:UserControl
{……}
使用ControlCachePolicy類
使用ControlCachePolicy類有以下注意事項。
一是如果要建立正確有效ControlCachePolicy類執行個體以便設定控制項緩衝,那麼必須訪問PartialCachingControl類的BasePartialCachingControl.CachePolicy屬性(BasePartialCachingControl是PartialCachingControl類的基類)。
二是ControlCachePolicy執行個體僅在控制項生命週期的Init和PreRender階段之間,才能成功操作。
例子代碼:
使用PartialCachingAttribute類實現設定使用者控制項緩衝(使用者控制項程式碼後置檔案)
[PartialCaching(100)]
public partial class SimpleControl : UserControl
{......}
ASP.NET分頁檔原始碼。
使用ControlCachePolicy類實現設定使用者控制項緩衝(ASP.NET分頁檔)
<%@ Page Language="C#" Debug="true" %>
<%@ Reference Control="SimpleControl.ascx" %>
<script language="C#" runat="server">
void Page_Init(object sender, System.EventArgs e)
{
// 動態載入使用者控制項,並返回PartialCachingControl的執行個體對象
PartialCachingControl pcc = LoadControl("SimpleControl.ascx") as PartialCachingControl;
// 通過CachePolicy屬性擷取ControlCachePolicy執行個體
ControlCachePolicy cacheSettings = pcc.CachePolicy;
// 如果使用者控制項的緩衝到期設定大於60秒,則設定新的到期時間為30秒,並將其設定為絕對到期策略
if (cacheSettings.Duration > TimeSpan.FromSeconds(60)) {
// 設定使用者控制項到期時間和緩衝到期策略
cacheSettings.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(30)));
cacheSettings.SetSlidingExpiration(false);
}
// 將使用者控制項添加到頁面控制項階層中
Controls.Add(pcc);
}
</script>
3、應用程式資料緩衝
應用程式資料緩衝的主要功能是在記憶體中儲存各種與應用程式相關的對象。方法有三種:
指定鍵和值
Cache["keyName"] = "123";
該語句將建立或者重寫名稱為txtName的緩衝,並賦值為123。
使用Add方法
Cache.Add("keyName","123",null,DataTime.Now.AddSeconds(60),TimeSpan.Zero,CacheItemPriority.High,onRemove);
該句實現上例同樣的功能,並設定其緩衝依賴項為null;緩衝有效時間為60s;最後一次訪問所添加對象時到該對象到期時間的時間間隔為零(TimeSpan.Zero);緩衝對象優先順序為High;當緩衝被刪除時調用委託名稱為onRemove。
使用Insert方法
Insert方法和Add方法使用方法基本一致,但Insert方法還有幾種自己的重載後的方法,例如:
Cache.Insert("keyName","123");
4、緩衝依賴
緩衝的好處很多,但他也有弊端。比如說資料的即時性,使用者擷取的頁面可能是幾十秒甚至是幾個小時以前的伺服器緩衝資訊,這一點對於即時性要求比較高的程式來說是不可容忍的。這時候我們可以通過設定緩衝依賴,通過對依賴檔案的更改變動情況的判斷,來決定程式是否需要重建(重新整理)緩衝。
緩衝依賴的方式有很多種,這裡我們著重講解自訂依賴緩衝:
自訂緩衝依賴
代碼:
string fileName = Server.MapPath("file.xml");//設定檔案路徑
DateTime dt = DateTime.Now;//設定跟蹤依賴檔案的開始時間
CacheDependency dep = new CacheDependency(fileName,dt);//建立依賴對象#p#分網頁標題#e#
Cache.Insert("keyName","value",dep);//添加具有依賴的應用程式資料緩衝
除此之外,asp.net 2.0還支援SQL資料緩衝依賴及彙總類型緩衝依賴,考慮到章節的長度及內容的複雜性,我們不做多的講解,詳細請查閱:http://www.itgao.com/html/2007-05/45479.html
下一節內容:個人化使用者配置