深入分析緩存依賴中cachedependency對象及周邊小講
最近正在學緩存依賴,現(xiàn)把一些學習資料整理如下:
緩存依賴主要提供以下功能:
1.SQL 緩存依賴項可用于應用程序緩存和頁輸出緩存。
2.可在 SQL Server 7.0 及更高版本中使用 SQL 緩存依賴項。
3.可以在網(wǎng)絡園(一臺服務器上存在多個處理器)或網(wǎng)絡場(多臺服務器運行同一應用程序)中使用 SQL 緩存依賴項。
4.與 SQL 緩存依賴項關聯(lián)的數(shù)據(jù)庫操作比較簡單,因此不會給服務器帶來很高的處理成本。
現(xiàn)在把與緩存依賴相關的對象集合如下,并對差異性進行了一定程度的分析……
緩存依賴主要由3個核心類來實現(xiàn):CacheDependency、AggregateCacheDependency、SqlCacheDependency。CacheDependency 類是 AggregateCacheDependency 類和 SqlCacheDependency 類的父類。
CacheDependency跟蹤緩存依賴項,緩存依賴項可以是應用程序的 Cache 中的文件、目錄或與其他對象的鍵,可用于實現(xiàn)自定義緩存依賴。//對文件可起作用。
SqlCacheDependency類在所有受支持的 SQL Server 版本 (7.0, 2000, 2005) 上監(jiān)視特定的 SQL Server 數(shù)據(jù)庫表,以便在該表發(fā)生更改時,自動從 Cache 中刪除與該表關聯(lián)的項。數(shù)據(jù)庫表發(fā)生更改時,將自動刪除緩存項,并向 Cache 中添加新版本的項。在使用 SQL Server 2005 數(shù)據(jù)庫時,SqlCacheDependency 類還支持與 System.Data.SqlClient.SqlDependency 類進行集成。使用 SQL Server 2005 的查詢通知機制來檢測使 SQL 查詢結(jié)果無效的數(shù)據(jù)更改。與 SQL 查詢關聯(lián)的任何緩存項都將從 System.Web.Caching.Cache 中移除。在使用 SQL Server 2005 時,可以使用 SqlCacheDependency 類向應用程序的 Cache 添加依賴于 SQL Server 數(shù)據(jù)庫表或 SQL 查詢的項。//對數(shù)據(jù)表的支持
AggregateCacheDependency類監(jiān)視依賴項對象的集合,以便在任何依賴項對象更改時,該緩存項都會自動移除。數(shù)組中的對象可以是CacheDependency或者SqlCacheDependency對象、從 CacheDependency派生的自定義對象或這些對象的任意組合.
AggregateCacheDependency類與CacheDependency類的不同之處在于前者允許您將不同類型的多個依賴項與單個緩存項關聯(lián)。例如,如果您創(chuàng)建一個從 SQL Server 數(shù)據(jù)庫表和 XML 文件導入數(shù)據(jù)的頁,則可創(chuàng)建一個SqlCacheDependency對象來表示數(shù)據(jù)庫表的依賴項,以及一個CacheDependency來表XML 文件的依賴項。可創(chuàng)建 AggregateCacheDependency類的一個實例,將每個依賴項添加到該類中,而不是為每個依賴項調(diào)用 Cache.Insert 方法。然后,可使用單個Insert 調(diào)用使該頁依賴于 AggregateCacheDependency實例。
其中,本章主要講述CacheDependency的用法。
CacheDependency有幾中重載,各作用如下。
//假設緩存的來源文件是當前目錄下的data.xml文件
//緩存依賴的文件路徑
CacheDependency mydep = new CacheDependency("data.xml");
//緩存依賴的文件可以有多個
CacheDependency mydep1=new CacheDependency(new string []{"data.xml","data1.xml"});
//檢查緩存依賴更改的依據(jù)時間
CacheDependency mydep2 = new CacheDependency("data.xml", DateTime.Now);
//檢查多個依賴文件更改的依據(jù)時間
CacheDependency mydep3 = new CacheDependency(new string[] { "data.xml", "data1.xml" }, DateTime.Now);
//檢查依賴多個文件,也依賴多個緩存鍵值
CacheDependency mydep4 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" });
//關聯(lián)依賴,還可以依賴于另一個文件緩存依賴
CacheDependency mydep5 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, mydep);
//文件和鍵值上次修改的依據(jù)時間
CacheDependency mydep6 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, DateTime.Now);
//文件、另一個緩存依賴和鍵值上次修改的依據(jù)時間
CacheDependency mydep6 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, mydep,DateTime.Now);
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)//用于引用該項的緩存鍵。如果緩存改變,則true;詳情百度c#的Cache對象!
{
DataSet ds = new DataSet();
string filePath = Server.MapPath("~/App_Data/XMLFile.xml");//服務器數(shù)據(jù)絕對地址
ds.ReadXml(filePath);//讀取文件內(nèi)的數(shù)據(jù),保存在ds里
tableData = ds.Tables[0];
CacheDependency cdy = new CacheDependency(filePath,DateTime.Now);
Cache.Insert("data", tableData, cdy);//通過使用 Insert(重載Insert方法)方法將項添加到緩存中
//if (cdy.HasChanged)
//{
System.Diagnostics.Debug.WriteLine("Xml已變更");
//}
}
else
{
tableData = (DataTable)Cache["data"];//通過指定其鍵和值將項添加到緩存中
}
grvCS.DataSource = tableData;
grvCS.DataBind();
//DataSet mds = new DataSet();//驗證數(shù)據(jù)綁定用,因為xml層次結(jié)構(gòu)的問題導致了數(shù)據(jù)綁定失??;
//mds.ReadXml(Server.MapPath("~/App_Data/XMLFile.xml"));
//grvCS.DataSource = mds;
//grvCS.DataBind();
}
}
其中
1.記得在view頁面為gridview綁定相應的數(shù)據(jù)字段。
2.注意xml的格式,作者本人在實驗的時候就應Xml數(shù)據(jù)格式的問題導致讀取的數(shù)據(jù)綁定失敗。
相關文章
C#把數(shù)組中的某個元素取出來放到第一個位置的實現(xiàn)方法
這篇文章主要介紹了C#把數(shù)組中的某個元素取出來放到第一個位置的實現(xiàn)方法,涉及C#針對數(shù)組的常見操作技巧,非常具有實用價值,需要的朋友可以參考下2014-12-12C#中結(jié)構(gòu)(struct)的部分初始化和完全初始化實例分析
這篇文章主要介紹了C#中結(jié)構(gòu)(struct)的部分初始化和完全初始化,通過實例分析了結(jié)構(gòu)初始化中常見的錯誤及技巧,有助于加深對C#結(jié)構(gòu)(struct)的認識,需要的朋友可以參考下2014-09-09c#中Winform實現(xiàn)多線程異步更新UI(進度及狀態(tài)信息)
本篇文章主要介紹了c#中Winform實現(xiàn)多線程異步更新UI(進度及狀態(tài)信息) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02C#基于正則表達式實現(xiàn)獲取網(wǎng)頁中所有信息的網(wǎng)頁抓取類實例
這篇文章主要介紹了C#基于正則表達式實現(xiàn)獲取網(wǎng)頁中所有信息的網(wǎng)頁抓取類,結(jié)合完整實例形式分析了C#正則網(wǎng)頁抓取類與使用技巧,需要的朋友可以參考下2017-05-05