using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class Default4 : System.Web.UI.Page{ /// <summary> /// 擷取當前應用程式指定CacheKey的Cache對象值 /// </summary> /// <param name="CacheKey">索引索引值</param> /// <returns>返回緩衝對象</returns> public static object GetCache(string CacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCache[CacheKey]; } /// <summary> /// 設定以緩衝依賴的方式快取資料 /// </summary> /// <param name="CacheKey">索引索引值</param> /// <param name="objObject">緩衝對象</param> /// <param name="cacheDepen">依賴對象</param> public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert( CacheKey, objObject, dep, System.Web.Caching.Cache.NoAbsoluteExpiration, //從不到期 System.Web.Caching.Cache.NoSlidingExpiration, //禁用可調到期 System.Web.Caching.CacheItemPriority.Default, null); } protected void Page_Load(object sender, EventArgs e) { string CacheKey = "cachetest"; object objModel = GetCache(CacheKey); //從緩衝中擷取 if (objModel == null) //緩衝裡沒有 { objModel = DateTime.Now;//把目前時間進行緩衝 if (objModel != null) { //依賴 C:\\test.txt 檔案的變化來更新緩衝 System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency("C:\\test.txt"); SetCache(CacheKey, objModel, dep);//寫入緩衝 } } Label1.Text = objModel.ToString(); }}
當我們改變test.txt的內容時,緩衝會自動更新。這種方式非常適合讀取設定檔的緩衝處理。如果設定檔不變化,就一直讀取緩衝的資訊,一旦配置發生變化,自動更新同步緩衝的資料。
這種方式的缺點是,如果緩衝的資料比較多,相關的依賴檔案比較鬆散,對管理這些依賴檔案有一定的麻煩。對於負載平衡環境下,還需要同時更新多台Web伺服器下的快取檔案,如果多個Web應用中的緩衝依賴於同一個共用的檔案,可能會省掉這個麻煩。