1. 程式人生 > >ASP.NET快取——CacheDependency用法

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(
"data.xml", DateTime.Now);

    //檢查多個依賴檔案更改的依據時間

    CacheDependency mydep3 =new CacheDependency(newstring[] { "data.xml""data1.xml" }, DateTime.Now);

    //檢查依賴多個檔案,也依賴多個快取鍵值

    CacheDependency mydep4 =new CacheDependency(newstring[] { "data.xml""data1.xml" },
        
newstring[] { "Category"
"Category1" });

    //關聯依賴,還可以依賴於另一個檔案快取依賴

    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?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <book>
  3.   <item>
  4.     <bookName>C#開發</bookName>
  5.     <author>陳AA</author>
  6.   </item>
  7.   <item>
  8.     <bookName>Ado.net開發</bookName>
  9.     <author>陳BB</author>
  10.   </item>
  11. </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?
  1. using System.Data;  
  2. using System.Web.Caching;  
  3. namespace SqlDependencyInAspNet  
  4. {  
  5.     public partial class CacheDependencyPage : System.Web.UI.Page  
  6.     {  
  7.         protectedvoid Page_Load(object sender, EventArgs e)  
  8.         {  
  9.             if (!IsPostBack)  
  10.             {  
  11.                 GetData();  
  12.             }  
  13.         }  
  14.         privatevoid GetData()  
  15.         {  
  16.             DataTable tableData = new DataTable();  
  17.             if (Cache["data"] == null)  
  18.             {  
  19.                 DataSet ds = new DataSet();  
  20.                 string filePath = Server.MapPath("~/App_Data/XmlData.xml");  
  21.                 ds.ReadXml(filePath);  
  22.                 tableData = ds.Tables[0];  
  23.                 CacheDependency cdy = new CacheDependency(filePath);  
  24.                 Cache.Insert("data", tableData, cdy);  
  25.                 if (cdy.HasChanged)  
  26.                 {  
  27.                     System.Diagnostics.Debug.WriteLine("Xml已變更");  
  28.                 }  
  29.             }  
  30.             else
  31.             {  
  32.                 tableData = (DataTable)Cache["data"];  
  33.             }  
  34.             gvData.DataSource = tableData;  
  35.             gvData.DataBind();  
  36.         }  
  37.     }  
  38. }  
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中的內容。