我個人的理解,Cache緩衝依賴就是為了實現該緩衝能與被緩衝的檔案同步修改,例如一個TXT文檔被Cache緩衝,當修改該文檔的時候,能實現Cache緩衝也同步修改成已修改過的文檔的內容。
以下為一個例子;
/// <summary>
/// Cache快取資料的關鍵字Key
/// </summary>
private const string DATAFILENAME = "data/data.txt";
private static int count = 1;
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
CacheFileData(DATAFILENAME);
}
}
private void CacheFileData(string filename)
{ ///判斷檔案名稱是否為空白
if(string.IsNullOrEmpty(filename) == true) return;
///擷取檔案的實體路徑
string fullPath = Server.MapPath(filename);
///讀取檔案資料
StreamReader reader = new StreamReader(fullPath,System.Text.Encoding.Default);
string content = reader.ReadToEnd();
reader.Close();
///快取檔案的資料
AddData(fullPath,(object)content);
///顯示載入資料的時間
lbCacheCount.Text = "第 " + (count++).ToString() + " 次快取資料的時間:" + DateTime.Now.ToString();
}
private void AddData(string value,object data)
{ ///建立緩衝依賴
CacheDependency cdep = new CacheDependency(value);
///建立刪除資料的委託
CacheItemRemovedCallback remove = new CacheItemRemovedCallback(RemoveData);
///添加資料到Cache中,其中的幾個參數定義了使用哪個緩衝依賴,和當緩衝依賴執行時刪除資料時的回呼函數即:RemoveData()
Cache.Add(DATAFILENAME,data,cdep,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,CacheItemPriority.Normal,remove);
}
private void RemoveData(string value,object data,CacheItemRemovedReason reason)
{ ///如果緩衝依賴的被改變,或者到期,則重新快取資料
if(reason == CacheItemRemovedReason.DependencyChanged || reason == CacheItemRemovedReason.Expired)
{ ///延時0.5秒
System.Threading.Thread.Sleep(500);
///重新快取資料,即讀取新資料
CacheFileData(value);
}
else
{ ///儲存原來的資料不變
AddData(value,data);
}
}