深入分析緩存依賴中cachedependency對(duì)象及周邊小講
最近正在學(xué)緩存依賴,現(xiàn)把一些學(xué)習(xí)資料整理如下:
緩存依賴主要提供以下功能:
1.SQL 緩存依賴項(xiàng)可用于應(yīng)用程序緩存和頁(yè)輸出緩存。
2.可在 SQL Server 7.0 及更高版本中使用 SQL 緩存依賴項(xiàng)。
3.可以在網(wǎng)絡(luò)園(一臺(tái)服務(wù)器上存在多個(gè)處理器)或網(wǎng)絡(luò)場(chǎng)(多臺(tái)服務(wù)器運(yùn)行同一應(yīng)用程序)中使用 SQL 緩存依賴項(xiàng)。
4.與 SQL 緩存依賴項(xiàng)關(guān)聯(lián)的數(shù)據(jù)庫(kù)操作比較簡(jiǎn)單,因此不會(huì)給服務(wù)器帶來(lái)很高的處理成本。
現(xiàn)在把與緩存依賴相關(guān)的對(duì)象集合如下,并對(duì)差異性進(jìn)行了一定程度的分析……
緩存依賴主要由3個(gè)核心類來(lái)實(shí)現(xiàn):CacheDependency、AggregateCacheDependency、SqlCacheDependency。CacheDependency 類是 AggregateCacheDependency 類和 SqlCacheDependency 類的父類。
CacheDependency跟蹤緩存依賴項(xiàng),緩存依賴項(xiàng)可以是應(yīng)用程序的 Cache 中的文件、目錄或與其他對(duì)象的鍵,可用于實(shí)現(xiàn)自定義緩存依賴。//對(duì)文件可起作用。
SqlCacheDependency類在所有受支持的 SQL Server 版本 (7.0, 2000, 2005) 上監(jiān)視特定的 SQL Server 數(shù)據(jù)庫(kù)表,以便在該表發(fā)生更改時(shí),自動(dòng)從 Cache 中刪除與該表關(guān)聯(lián)的項(xiàng)。數(shù)據(jù)庫(kù)表發(fā)生更改時(shí),將自動(dòng)刪除緩存項(xiàng),并向 Cache 中添加新版本的項(xiàng)。在使用 SQL Server 2005 數(shù)據(jù)庫(kù)時(shí),SqlCacheDependency 類還支持與 System.Data.SqlClient.SqlDependency 類進(jìn)行集成。使用 SQL Server 2005 的查詢通知機(jī)制來(lái)檢測(cè)使 SQL 查詢結(jié)果無(wú)效的數(shù)據(jù)更改。與 SQL 查詢關(guān)聯(lián)的任何緩存項(xiàng)都將從 System.Web.Caching.Cache 中移除。在使用 SQL Server 2005 時(shí),可以使用 SqlCacheDependency 類向應(yīng)用程序的 Cache 添加依賴于 SQL Server 數(shù)據(jù)庫(kù)表或 SQL 查詢的項(xiàng)。//對(duì)數(shù)據(jù)表的支持
AggregateCacheDependency類監(jiān)視依賴項(xiàng)對(duì)象的集合,以便在任何依賴項(xiàng)對(duì)象更改時(shí),該緩存項(xiàng)都會(huì)自動(dòng)移除。數(shù)組中的對(duì)象可以是CacheDependency或者SqlCacheDependency對(duì)象、從 CacheDependency派生的自定義對(duì)象或這些對(duì)象的任意組合.
AggregateCacheDependency類與CacheDependency類的不同之處在于前者允許您將不同類型的多個(gè)依賴項(xiàng)與單個(gè)緩存項(xiàng)關(guān)聯(lián)。例如,如果您創(chuàng)建一個(gè)從 SQL Server 數(shù)據(jù)庫(kù)表和 XML 文件導(dǎo)入數(shù)據(jù)的頁(yè),則可創(chuàng)建一個(gè)SqlCacheDependency對(duì)象來(lái)表示數(shù)據(jù)庫(kù)表的依賴項(xiàng),以及一個(gè)CacheDependency來(lái)表XML 文件的依賴項(xiàng)??蓜?chuàng)建 AggregateCacheDependency類的一個(gè)實(shí)例,將每個(gè)依賴項(xiàng)添加到該類中,而不是為每個(gè)依賴項(xiàng)調(diào)用 Cache.Insert 方法。然后,可使用單個(gè)Insert 調(diào)用使該頁(yè)依賴于 AggregateCacheDependency實(shí)例。
其中,本章主要講述CacheDependency的用法。
CacheDependency有幾中重載,各作用如下。
//假設(shè)緩存的來(lái)源文件是當(dāng)前目錄下的data.xml文件
//緩存依賴的文件路徑
CacheDependency mydep = new CacheDependency("data.xml");
//緩存依賴的文件可以有多個(gè)
CacheDependency mydep1=new CacheDependency(new string []{"data.xml","data1.xml"});
//檢查緩存依賴更改的依據(jù)時(shí)間
CacheDependency mydep2 = new CacheDependency("data.xml", DateTime.Now);
//檢查多個(gè)依賴文件更改的依據(jù)時(shí)間
CacheDependency mydep3 = new CacheDependency(new string[] { "data.xml", "data1.xml" }, DateTime.Now);
//檢查依賴多個(gè)文件,也依賴多個(gè)緩存鍵值
CacheDependency mydep4 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" });
//關(guān)聯(lián)依賴,還可以依賴于另一個(gè)文件緩存依賴
CacheDependency mydep5 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, mydep);
//文件和鍵值上次修改的依據(jù)時(shí)間
CacheDependency mydep6 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, DateTime.Now);
//文件、另一個(gè)緩存依賴和鍵值上次修改的依據(jù)時(shí)間
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)//用于引用該項(xiàng)的緩存鍵。如果緩存改變,則true;詳情百度c#的Cache對(duì)象!
{
DataSet ds = new DataSet();
string filePath = Server.MapPath("~/App_Data/XMLFile.xml");//服務(wù)器數(shù)據(jù)絕對(duì)地址
ds.ReadXml(filePath);//讀取文件內(nèi)的數(shù)據(jù),保存在ds里
tableData = ds.Tables[0];
CacheDependency cdy = new CacheDependency(filePath,DateTime.Now);
Cache.Insert("data", tableData, cdy);//通過(guò)使用 Insert(重載Insert方法)方法將項(xiàng)添加到緩存中
//if (cdy.HasChanged)
//{
System.Diagnostics.Debug.WriteLine("Xml已變更");
//}
}
else
{
tableData = (DataTable)Cache["data"];//通過(guò)指定其鍵和值將項(xiàng)添加到緩存中
}
grvCS.DataSource = tableData;
grvCS.DataBind();
//DataSet mds = new DataSet();//驗(yàn)證數(shù)據(jù)綁定用,因?yàn)閤ml層次結(jié)構(gòu)的問(wèn)題導(dǎo)致了數(shù)據(jù)綁定失敗;
//mds.ReadXml(Server.MapPath("~/App_Data/XMLFile.xml"));
//grvCS.DataSource = mds;
//grvCS.DataBind();
}
}
其中
1.記得在view頁(yè)面為gridview綁定相應(yīng)的數(shù)據(jù)字段。
2.注意xml的格式,作者本人在實(shí)驗(yàn)的時(shí)候就應(yīng)Xml數(shù)據(jù)格式的問(wèn)題導(dǎo)致讀取的數(shù)據(jù)綁定失敗。
- asp.net開(kāi)發(fā)中怎樣去突破文件依賴緩存
- 開(kāi)啟SQLSERVER數(shù)據(jù)庫(kù)緩存依賴優(yōu)化網(wǎng)站性能
- SQL Server 高速緩存依賴分析
- 使用Memcache緩存mysql數(shù)據(jù)庫(kù)操作的原理和緩存過(guò)程淺析
- mysql實(shí)現(xiàn)本地keyvalue數(shù)據(jù)庫(kù)緩存示例
- asp.net 備份和恢復(fù)數(shù)據(jù)庫(kù)的方法示例
- asp.net連接數(shù)據(jù)庫(kù)讀取數(shù)據(jù)示例分享
- asp.net 通用的連接數(shù)據(jù)庫(kù)實(shí)例代碼
- ASP.NET數(shù)據(jù)庫(kù)緩存依賴實(shí)例分析
相關(guān)文章
C#調(diào)用halcon實(shí)現(xiàn)使用鼠標(biāo)滾輪對(duì)圖片進(jìn)行縮放顯示
這篇文章主要為大家詳細(xì)介紹了C#如何調(diào)用halcon實(shí)現(xiàn)使用鼠標(biāo)滾輪對(duì)圖片進(jìn)行縮放顯示,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
C#使用DllImport調(diào)用非托管的代碼的方法
C#調(diào)用非托管代碼的方式主要有Com調(diào)用、DllImport方式調(diào)用、加載非托管動(dòng)態(tài)鏈接庫(kù)、直接執(zhí)行機(jī)器碼等方式?,F(xiàn)在介紹一下我自己常用的DllImport方式調(diào)用MSDN中提到的GetShortPathName方法;2013-03-03
詳解C# TimeSpan 計(jì)算時(shí)間差(時(shí)間間隔)
本篇文章主要介紹了C# TimeSpan 計(jì)算時(shí)間差(時(shí)間間隔),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2016-12-12
C#實(shí)現(xiàn)Winform動(dòng)態(tài)添加菜單的方法
這篇文章主要介紹了C#實(shí)現(xiàn)Winform動(dòng)態(tài)添加菜單的方法,涉及C#操作菜單的技巧,需要的朋友可以參考下2015-05-05
C#測(cè)量程序運(yùn)行時(shí)間及cpu使用時(shí)間實(shí)例方法
對(duì)一個(gè)服務(wù)器程序想統(tǒng)計(jì)每秒可以處理多少數(shù)據(jù)包,要如何做?答案是用處理數(shù)據(jù)包的總數(shù),除以累記處理數(shù)據(jù)包用的時(shí)間,下面我們看一個(gè)代碼實(shí)例就明白了2013-11-11
WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
這篇文章主要介紹了WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法,涉及WinForm窗口滾動(dòng)字幕設(shè)置的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
C# 使用匿名函數(shù)解決EventHandler參數(shù)傳遞的難題
C#動(dòng)態(tài)生成PictureBox并綁定右鍵菜單,實(shí)現(xiàn)刪除圖片2009-05-05

