ASP.NET快取——CacheDependency用法
最近有在研究快取這個東西,所以在網上看到不少的介紹文章,於是,我就結合別人的經驗再加上自己的理解弄了這篇文章。系列目錄下的文章都應該是原作者的
。至於對快取有更全面的理解的話,你可以看這篇文章http://blog.csdn.net/wayne20018891/article/details/7265453
系列目錄:
-------------------------------------------------------------------------------------------
按Msdn解釋,CacheDependency在儲存於 ASP.NET 應用程式的 Cache 物件中的項與檔案、快取鍵、檔案或快取鍵的陣列或另一個 CacheDependency 物件之間建立依附性關係。CacheDependency 類監視依附性關係,以便在任何這些物件更改時,該快取項都會自動移除。
CacheDependency有幾中過載,各作用如下。
//假設快取的來原始檔是當前目錄下的data.xml檔案
//快取依賴的檔案路徑
CacheDependency mydep =new CacheDependency("data.xml");//快取依賴的檔案可以有多個
CacheDependency mydep1=new CacheDependency(newstring []{"data.xml","data1.xml"});//檢查快取依賴更改的依據時間
CacheDependency mydep2 =new CacheDependency(//檢查多個依賴檔案更改的依據時間
CacheDependency mydep3 =new CacheDependency(newstring[] { "data.xml", "data1.xml" }, DateTime.Now);//檢查依賴多個檔案,也依賴多個快取鍵值
CacheDependency mydep4 =new CacheDependency(newstring[] { "data.xml", "data1.xml" },newstring[] { "Category",
//關聯依賴,還可以依賴於另一個檔案快取依賴
CacheDependency mydep5 =new CacheDependency(newstring[] { "data.xml", "data1.xml" },newstring[] { "Category", "Category1" }, mydep);
//檔案和鍵值上次修改的依據時間
CacheDependency mydep6 =new CacheDependency(newstring[] { "data.xml", "data1.xml" },newstring[] { "Category", "Category1" }, DateTime.Now);
//檔案、另一個快取依賴和鍵值上次修改的依據時間
CacheDependency mydep6 =new CacheDependency(newstring[] { "data.xml", "data1.xml" },newstring[] { "Category", "Category1" }, mydep,DateTime.Now);
例子
用CacheDependency監控一個XML檔案。當XML檔案變更時清除快取,然後重新取得資料。方法如下。
新建一個Asp.Net應用程式。在App_Data中建立一個XML檔案,名為XmlData.XML。內容如下:
[html] view plain copy print?- <?xmlversion="1.0"encoding="utf-8"?>
- <book>
- <item>
- <bookName>C#開發</bookName>
- <author>陳AA</author>
- </item>
- <item>
- <bookName>Ado.net開發</bookName>
- <author>陳BB</author>
- </item>
- </book>
<?xml version="1.0" encoding="utf-8" ?>
<book>
<item>
<bookName>C#開發</bookName>
<author>陳AA</author>
</item>
<item>
<bookName>Ado.net開發</bookName>
<author>陳BB</author>
</item>
</book>
新建一個aspx檔案,名子為CacheDependencyPage.aspx。在頁面放一個GridView,命名為gvData用於顯示XML資料。編寫後臺程式碼,如下:
[csharp] view plain copy print?- using System.Data;
- using System.Web.Caching;
- namespace SqlDependencyInAspNet
- {
- public partial class CacheDependencyPage : System.Web.UI.Page
- {
- protectedvoid Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- GetData();
- }
- }
- privatevoid GetData()
- {
- DataTable tableData = new DataTable();
- if (Cache["data"] == null)
- {
- DataSet ds = new DataSet();
- string filePath = Server.MapPath("~/App_Data/XmlData.xml");
- ds.ReadXml(filePath);
- tableData = ds.Tables[0];
- CacheDependency cdy = new CacheDependency(filePath);
- Cache.Insert("data", tableData, cdy);
- if (cdy.HasChanged)
- {
- System.Diagnostics.Debug.WriteLine("Xml已變更");
- }
- }
- else
- {
- tableData = (DataTable)Cache["data"];
- }
- gvData.DataSource = tableData;
- gvData.DataBind();
- }
- }
- }
using System.Data;
using System.Web.Caching;
namespace SqlDependencyInAspNet
{
public partial class CacheDependencyPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetData();
}
}
private void GetData()
{
DataTable tableData = new DataTable();
if (Cache["data"] == null)
{
DataSet ds = new DataSet();
string filePath = Server.MapPath("~/App_Data/XmlData.xml");
ds.ReadXml(filePath);
tableData = ds.Tables[0];
CacheDependency cdy = new CacheDependency(filePath);
Cache.Insert("data", tableData, cdy);
if (cdy.HasChanged)
{
System.Diagnostics.Debug.WriteLine("Xml已變更");
}
}
else
{
tableData = (DataTable)Cache["data"];
}
gvData.DataSource = tableData;
gvData.DataBind();
}
}
}
測試,執行程式,頁面上會顯示XML中的資料,後臺會快取當前取出的資料。重新整理頁面時會中快取中取資料。然後修改XML檔案中的內容,再次重新整理,快取會被刪除,然後重新取得XML中的內容。