生活随笔
收集整理的這篇文章主要介紹了
[转]ASP.Net缓存总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ASP.Net緩存總結(jié) Asp.net 緩存技術(shù)總結(jié) 2008-04-01 17:29
提高性能最好最快的辦法當(dāng)然是通過(guò)緩存來(lái)改善,對(duì)于任何一個(gè)web開(kāi)發(fā)者都應(yīng)該善用緩存。Asp.net下的緩存機(jī)制十分強(qiáng)大,用好緩存機(jī)制可以讓我們極大的改善web應(yīng)用的性能,下面是一些總結(jié)的緩存的知識(shí)點(diǎn),與大家分享交流: 1.頁(yè)面緩存 ?????? 要實(shí)現(xiàn)頁(yè)面輸出緩存,只要將一條 OutputCache 指令添加到頁(yè)面即可。 ??? ??? <%@ OutputCache CacheProfile =" " NoStore= "True | False" Duration ="#ofseconds" Shared ="True | False" Location ="Any | Client | Downstream | Server | None | ServerandClient " SqlDependency ="database/table name pair | CommandNotification " VaryByControl ="controlname" VaryByCustom ="browser | customstring" VaryByHeader ="headers" VaryByParam ="parametername" %> ??? ??? ???? CacheProfile ???????????? 用于定義與該頁(yè)關(guān)聯(lián)的緩存設(shè)置的名稱。是可選屬性,默認(rèn)值為空字符("")。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。在頁(yè)面中指定此屬性時(shí),屬性值必須與Web.config文件<outputCacheSettings>配置節(jié)下的outputCacheProfiles元素中的一個(gè)可用項(xiàng)的名稱匹配。如果此名稱與配置文件項(xiàng)不匹配,將引發(fā)異常。 ???? ??? ??? NoStore ???????????? 該屬性定義一個(gè)布爾值,用于決定是否阻止敏感信息的二級(jí)存儲(chǔ)。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。將此屬性設(shè)置為true等效于在請(qǐng)求期間執(zhí)行代碼“Response.Cache.SetNoStore();”。 ??? ??? ??? Duration ???????????? 用于設(shè)置頁(yè)面或者用戶控件緩存的時(shí)間。單位是秒。通過(guò)設(shè)置該屬性,能夠?yàn)閬?lái)自對(duì)象的HTTP響應(yīng)建立了一個(gè)過(guò)期策略,并將自動(dòng)緩存頁(yè)或用戶控件輸出。需要注意的是,Duration屬性是必需的,否則將會(huì)引起分析器錯(cuò)誤。 ???? ??? ??? Shared ???????????? 該屬性定義一個(gè)布爾值,用于確定用戶控件輸出是否可以由多個(gè)頁(yè)共享。默認(rèn)值為false。注意,包含在ASP.NET頁(yè)中的@ OutputCache指令不支持此屬性。 ??? ??? ??? Location ???????????? 用于指定輸出緩存項(xiàng)的位置。其屬性值是OutputCacheLocation枚舉值,它們是Any、Client、Downstream、None、Server和ServerAndClient。默認(rèn)值是Any,表示輸出緩存可用于所有請(qǐng)求,包括客戶端瀏覽器、代理服務(wù)器或處理請(qǐng)求的服務(wù)器上。需要注意的是,包含在用戶控件中的@ OutputCache指令不支持此屬性。 ????? ??? ?? SqlDependency ???????????? 該屬性標(biāo)識(shí)一組數(shù)據(jù)庫(kù)/表名稱對(duì)的字符串值,頁(yè)或控件的輸出緩存依賴于這些名稱對(duì)。需要注意:SqlCacheDependency類監(jiān)視輸出緩存所依賴的數(shù)據(jù)庫(kù)中的表,因此,當(dāng)更新表中的項(xiàng)時(shí),使用基于表的輪詢將從緩存中移除這些項(xiàng)。當(dāng)通知(在SQL Server 2005中)與CommandNotification值一起使用時(shí),最終將使用SqlDependency類向SQL Server 2005服務(wù)器注冊(cè)查詢通知。另外,SqlDependency屬性的CommandNotification值僅在ASP.NET頁(yè)中有效。控件只能將基于表的輪詢用于@ OutputCache指令。 ???? ??? ??? VaryByControl ???????????? 該屬性使用一個(gè)分號(hào)分隔的字符串列表來(lái)更改用戶控件的輸出緩存。這些字符串代表在用戶控件中聲明的ASP.NET服務(wù)器控件的ID屬性值。除非已經(jīng)包含了VaryByParam屬性,否則在@ OutputCache指令中,該屬性是必需的。 ???????? ??? VaryByCustom ???????????? 用于自定義輸出緩存要求的任意文本。如果賦予該屬性值是browser,緩存將隨瀏覽器名稱和主要版本信息的不同而異。如果輸入了自定義字符串,則必須在應(yīng)用程序的Global.asax文件中重寫(xiě)HttpApplication.GetVaryByCustomString方法。 ??? ??? ??? VaryByHeader ???????????? 該屬性中包含由分號(hào)分隔的HTTP標(biāo)頭列表,用于使輸出緩存發(fā)生變化。當(dāng)將該屬性設(shè)為多標(biāo)頭時(shí),對(duì)于每個(gè)指定的標(biāo)頭,輸出緩存都包含一個(gè)請(qǐng)求文檔的不同版本。VaryByHeader屬性在所有HTTP 1.1緩存中啟用緩存項(xiàng),而不僅限于ASP.NET緩存。用戶控件中的@ OutputCache指令不支持此屬性。 ???? ??? ??? VaryByParam ???????????? 該屬性定義了一個(gè)分號(hào)分隔的字符串列表,用于使輸出緩存發(fā)生變化。默認(rèn)情況下,這些字符串與用GET方法屬性發(fā)送的查詢字符串值對(duì)應(yīng),或與用POST方法發(fā)送的參數(shù)對(duì)應(yīng)。當(dāng)將該屬性設(shè)置為多參數(shù)時(shí),對(duì)于每個(gè)指定的參數(shù),輸出緩存都包含一個(gè)請(qǐng)求文檔的不同版本。可能的值包括“none”、“*”和任何有效的查詢字符串或POST參數(shù)名稱。值得注意的是,在輸出緩存ASP.NET頁(yè)時(shí),該屬性是必需的。它對(duì)于用戶控件也是必需的,除非已經(jīng)在用戶控件的@ OutputCache指令中包含了VaryByControl屬性。如果沒(méi)有包含,則會(huì)發(fā)生分析器錯(cuò)誤。如果不需要使緩存內(nèi)容隨任何指定參數(shù)發(fā)生變化,則可將該值設(shè)為“none”。如果要使輸出緩存根據(jù)所有參數(shù)值發(fā)生變化,則將屬性設(shè)置為“*”。 ?? ?? ??? ?? 創(chuàng)建頁(yè)面輸出緩存文件依賴 ?????? 示例代碼:Response.AddFileDependency(MapPath("test.xml")); ??? ?? 如需要建立依賴多文件關(guān)系,則使用AddFileDependencies()方法。 ??? ?? ??? ?? 使用編程方式設(shè)置頁(yè)面緩存過(guò)期 ??? ?? ??? ?? 示例代碼:HttpResponse.RemoveOutputCacheItem(Page.ResolveUrl("~/test.aspx")); ??? ?? 此方法只接受一個(gè)"虛擬絕對(duì)"路徑,因此需用Page.ResolveUrl()方法轉(zhuǎn)換 ??? ?? ??? ?? 使用編程方式設(shè)置多個(gè)頁(yè)面緩存過(guò)期(創(chuàng)建鍵依賴(key dependency) ) ??? ?? ??? ?? 示例代碼: ??? ?? 緩存頁(yè)面:PageLoad: ??? ??? Cache.Insert(“key”,DateTime.Now); ??? ??? Response.AddCacheItemDependency("key"); ??? ?? 通過(guò)此法向多個(gè)頁(yè)面添加依賴項(xiàng) ??? ?? 移除依賴項(xiàng):PageLoad: ??? ?? Cache.Remove("key"); ??? ?? 以編程方式操作頁(yè)面輸出緩存 ??? ?? 操作由Response.Cache屬性暴露的HttpCachePolicy類對(duì)象的方法。 ??? ?? 創(chuàng)建頁(yè)面輸出緩存配置 ??? <system.web> ??? ?? ?? <caching> ??? ?? ?? ?? ?? <outputCacheSettings> ??? ??? ??? ??? ??? <outputCacheProfiles> ??? ??? ??? ??? ??? ??? ??? <add name="CacheProfile1" duration="60" /> ??? ??? ??? ??? ??? </outputCacheProfiles> ??? ??? ??? ??? </outputCacheSettings> ??? ?? ?? </caching> ??? ?? </system.web>2.部分頁(yè)面緩存 ??? ?? 緩存后替換 ??? ?? ??? ?? 采用聲明方式,使用Substitution控件,設(shè)置MethodName屬性所需的方法,此方法必須是靜態(tài)方法,因?yàn)楫?dāng)前頁(yè)輸出緩存時(shí),頁(yè)面實(shí)例還沒(méi)被創(chuàng)建。注:AdRotator內(nèi)部使用了緩存后替代。 ??? ?? ??? ?? 以編程方式設(shè)置緩存后替換,使用Response.WriteSubstitution()方法,好處:1,此方法引用的方法不一定是當(dāng)前類的方法,可以是另一個(gè)類的實(shí)力或靜態(tài)方法。2,可以在自定義控件中使用此方法實(shí)現(xiàn)緩存后替換。 ??? ?? ??? ?? 部分頁(yè)面緩存:用戶控件緩存 ??? ?? ??? ?? 給用戶控件添加<%@ OutputCache%>指令。此指令包含一個(gè)Shared屬性,可設(shè)置共享用戶控件的輸出緩存 。 ??? ?? 以編程方式設(shè)置用戶控件緩存 ??? ?? 當(dāng)用戶控件中包括<%@ OutputCache%>指令時(shí),可以通過(guò)用戶控件的CachePolicy屬性所暴露的ControlCachePolicy類的實(shí)例的屬性控制修改空間如何緩存。 ??? ?? 創(chuàng)建用戶控件緩存的文件依賴 ??? ?? 可以使用CacheControlPolicy.Dependency屬性在一個(gè)緩存了的用戶控件和文件系統(tǒng)中一個(gè)文件間創(chuàng)建一個(gè)依賴,示例代碼: ??? ?? PageLoad: ??? ?? CacheDependency depend=new CacheDependency(MapPath("~/test.xml")); ??? ?? this.CachePolicy.Dependency=depend; ??? ?? ??? ?? 緩存動(dòng)態(tài)載入的用戶控件 ??? ?? 可以使用Page.LoadControl()方法載入用戶控件,當(dāng)具有緩存特性的用戶控件被載入時(shí),Asp.net Framework自動(dòng)一個(gè)PartialCachingControl類的實(shí)例包裝用戶控件。示例代碼: ??? ?? PageLoad: ??? ?? PartialCachingControl cacheme=(PartialCachingControl)Page.LoadControl("test.ascx"); ??? ?? Cacheme.CachePolicy.SetExpires(DateTime.Now.AddSeconds(10)); ??? ?? PlaceHolder1.Controls.Add(cacheme); ??? ?? Lable1.Text=cacheme.CachePolicy.Duration.ToString();3.使用DataSource緩存 ??? ?? SqlDataSource、ObjectDataSource、XmlDataSource控件都包括了用于緩存DataSource承載的屬性,好處是數(shù)據(jù)源控件可以在數(shù)據(jù)更新時(shí)自動(dòng)重新載入數(shù)據(jù)。并且可以在多個(gè)頁(yè)面間共享相同的數(shù)據(jù),通過(guò)一些屬性的組合來(lái)識(shí)別:SelectCommand、SelectParameters、ConnectionString。如果屬性相同,即共享相同的緩存數(shù)據(jù)。 ??? ?? 通過(guò)設(shè)置屬性設(shè)置緩存過(guò)期策略 ??? ?? 包括絕對(duì)緩存(EnableCaching="True" CacheDuration=“xxx”)和Sliding緩存(EnableCaching="True" CacheExpirationPolicy="Sliding" CacheDuration=“xxx”) ??? ?? ??? ?? 使用ObjectDataSource控件緩存 ??? ?? ??? ?? 通過(guò)設(shè)置控件的EnableCaching、CacheExpirationPolicy、CacheDuration屬性以及SelectMethod所制定的方法名來(lái)完成。 ??? ?? 使用XmlDataSource控件緩存 ??? ?? 設(shè)置DataFile屬性創(chuàng)建一個(gè)文件依賴。 ??? ?? 創(chuàng)建數(shù)據(jù)源控件鍵值依賴 ??? ?? ??? ?? 操作步驟 ??? ?? 1、設(shè)置數(shù)據(jù)源控件的CacheKeyDependency屬性(key); ??? ?? 2、在Global.asax創(chuàng)建初始化的(key)緩存項(xiàng)目。代碼如下: ??? ?? Void Application_Start(Object Sender,EventArgs e) ??? ??? { ??? ?? ?? ?? HttpContext context=HttpContext.Current; ??? ?? ?? ?? context.Cache.Insert( ??? ?? ?? ?? "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null ??? ??? ??? ); ??? ??? } ??? ?? 3、在用于更改數(shù)據(jù)的頁(yè)面上移除緩存項(xiàng)目(key); ??? ?? 如在DetailsView控件的ItemInserted事件中重新插入緩存項(xiàng)目,此時(shí)每個(gè)依賴于這個(gè)鍵值(key)的DataSource會(huì)自動(dòng)重新載入數(shù)據(jù),代碼如下: ??? ?? protected void DetailsView_ItemInserted(object sender,DetailsViewInsertedEventArgs e) ??? ?? { ??? ?? ??? Cache.Insert("key",Datetime.Now); ??? ??? } ??? ?? 注:以上key值采用當(dāng)前時(shí)間并非必須。4.Cache對(duì)象 ??? ?? 幾乎可以給緩存添加任何對(duì)象,例如,可以添加自定義控件,DataSet,DataTable,ArrayList和List到緩存。注意:使用從緩存中返回的任何項(xiàng)目,應(yīng)該總是要檢查項(xiàng)目是否為空,如果一個(gè)項(xiàng)目已經(jīng)被刪除了,則當(dāng)將來(lái)試圖從緩存中讀取時(shí),就會(huì)返回null。 ??? ?? 詳細(xì)信息查看msdnCache 成員 ??? ?? 添加數(shù)據(jù)緩存到Cache對(duì)象示例代碼: ??? ??? void Page_Load() ??? ??? { ??? ?? ?? ?? DataTable dt=(DataTable)Cache["dtkey"]; ??? ?? ?? ??? if(dt==null) ??? ?? ?? ?? ?? { ??? ?? ?? ?? ?? ?? ?? dt=getdtFromDB();?? //此處調(diào)用方法從數(shù)據(jù)庫(kù)中返回?cái)?shù)據(jù)項(xiàng)DataTable ??? ?? ?? ?? ?? ?? ?? Cache.Insert("dtKey",dt,null,DateTime.Now.AddHours(1),Cache.NoSlidingExpiration);?? //此處使用絕對(duì)過(guò)期策略添加項(xiàng)目 ??? ??? ??? ???? } ??? ?? ?? ?? ?? GridView1.DataSource=dt; ??? ?? ?? ?? ?? GridView1.DataBind(); ??? ??? } ???? ??? private DataTable getdtFromDB() ??? ?? { ??? ?? ?? //略...... ??? ??? } ??? ?? 使用依賴添加項(xiàng)目 ??? ?? Asp.net Framework包括三種緩存依賴 ??? ?? 1、CacheDependency——用于創(chuàng)建一個(gè)文件依賴或緩存鍵值依賴。 ??? ?? 2、SqlCacheDependency——用于創(chuàng)建一個(gè)對(duì)于Microsoft SQL Server數(shù)據(jù)庫(kù)表或SQL Server 2005數(shù)據(jù)庫(kù)查詢的依賴。 ??? ?? 3、AggregateCacheDependency——用于使用多個(gè)CacheDependency對(duì)象創(chuàng)建依賴,例如,可以用該對(duì)象組合文件和Sql依賴。 ??? ?? CacheDependency類是基類,其他兩個(gè)類都是從該類繼承。 ??? ?? 指定緩存項(xiàng)目?jī)?yōu)先級(jí) ??? ?? ??? ?? 可以指定CacheItemPriority枚舉類型任意值。 ??? ?? 配置緩存 ??? ??? ??? ?? 詳細(xì)信息查看Msdn Caching元素 5.使用SQL緩存依賴 ?????? Asp.net Framework支持兩種類型的SQL緩存依賴:拉和推。第一種模式使用表輪詢的 ASP.NET 實(shí)現(xiàn),第二種模式使用 SQL Server 2005 的查詢通知功能。可以對(duì)任何最近版本的Ms SQL Server,包括Ms SQL server 2005 Express、Ms SQL Server 2000 和 Ms SQL Server 7.0,使用拉SQL緩存依賴。第二種類型推緩存依賴則只能用于Ms SQL Server 2005和Ms SQL server 2005 Express,因?yàn)樗麄円蕾嘢QL Server的Service Broker。 ??? ?? ??? ?? 使用拉SQL緩存依賴 ?? ???? 實(shí)質(zhì)上拉SQL緩存依賴使用數(shù)據(jù)庫(kù)tigger,當(dāng)表被修改時(shí),tigger被觸發(fā),名為AspNet_SqlCacheTablesForChangeNotification的數(shù)據(jù)表的一行數(shù)據(jù)被更新,來(lái)記錄修改情況,Asp.net Framework使用一個(gè)后臺(tái)線程,來(lái)定期拉數(shù)據(jù)表的修改信息。如果有修改,則依賴于數(shù)據(jù)表的緩存項(xiàng)目被移除。 ??? ?? 配置拉SQL緩存依賴: ??? ?? 1、必須對(duì)一個(gè)或多個(gè)數(shù)據(jù)庫(kù)表啟用SQL緩存依賴。 ??? ?? ?? ?? ??? ?? ?? ?? 可以使用框架中的SqlCacheDependencyAdmin類來(lái)配置SQL數(shù)據(jù)庫(kù)支持拉SQL緩存依賴,由于調(diào)用該類的方法需要?jiǎng)?chuàng)建表、存儲(chǔ)過(guò)程、trigger,出于安全考慮,Asp.net進(jìn)程并不應(yīng)該被賦予這些權(quán)限,而是通過(guò)一個(gè)命令行工具來(lái)使用此類。 ??? ?? ?? ?? aspnet_regsql 詳細(xì)信息訪問(wèn)Msdn ASP.NET SQL Server 注冊(cè)工具 (Aspnet_regsql.exe) ??? ?? ?? ?? 簡(jiǎn)要步驟: 1、啟用特定數(shù)據(jù)庫(kù)的SQL緩存依賴。 ??? ?? ?? ?? aspnet_regsql -c "Data Source=localhost;integrated Security=True;Initial Catalog=Pubs" -ed ??? ??? ??? ??? ??? ??? ??? ??? 2、啟用特定表的SQL緩存依賴。 ??? ?? ?? ?? aspnet_regsql -c "Data Source=localhost;integrated Security=True;Initial Catalog=Pubs" -ed -t Titles ??? ?? 2、必須在Web配置文件中配置SQL緩存依賴。 ??? ?? ?? ?? <!-- caching section group --> ??? ??? ??? ??? <caching> ??? ??? ??? ??? <sqlCacheDependency enabled = "true" pollTime = "1000" >?? //通過(guò)pollTime 的設(shè)置,定時(shí)拉數(shù)據(jù)庫(kù)的修改 ??? ??? ??? ??? ??? <databases> ????? ??? ??? ??? ??? <add name="Northwind" ???????? ??? ??? ??? ??? connectionStringName="NorthwindConnectionString1" ??????? ?? ??? ??? ??? pollTime = "1000" ????? ??? ??? ??? ??? /> ??? ??? ??? ??? ??? </databases> ??? ??? ??? ??? </sqlCacheDependency> ??? ??? ??? ??? </caching> ????? a、 對(duì)頁(yè)面輸出緩存使用拉SQL緩存依賴 :<%@ OutputCache%>指令指定sqlDependency屬性值:庫(kù)名和表名(Mydatabase:Mytable); ??? ?? ??? ?? b、對(duì)DataSource控件使用拉SQL緩存依賴 :為DataSource控件sqlDependency屬性指定值:庫(kù)名和表名(Mydatabase:Mytable); ??? ?? c、對(duì)Cache對(duì)象使用拉SQL緩存依賴 : ??? ?? ??? ?? void Page_Load() ??? ??? { ??? ?? ?? ?? DataTable dt=(DataTable)Cache["dtkey"]; ??? ?? ?? ??? if(dt==null) ??? ?? ?? ?? ?? { ??? ?? ?? ?? ?? ?? ?? dt=getdtFromDB();?? //此處調(diào)用方法從數(shù)據(jù)庫(kù)中返回?cái)?shù)據(jù)項(xiàng)DataTable ??? ?? ?? ?? ?? ?? ?? SqlCacheDependency sqlDepend=new SqlCacheDependecy("Mydatabase","Mytable"); ??? ?? ?? ?? ?? ?? ?? Cache.Insert("dtKey",dt,sqlDepend); ??? ??? ??? ???? } ??? ?? ?? ?? ?? GridView1.DataSource=dt; ??? ?? ?? ?? ?? GridView1.DataBind(); ??? ??? } ???? ??? private DataTable getdtFromDB() ??? ?? { ??? ?? ?? //略...... ??? ??? } ??? ?? ??? ?? 使用推SQL緩存依賴 ?????? 通過(guò)Service Broker可以在數(shù)據(jù)庫(kù)中的數(shù)據(jù)變更時(shí)自動(dòng)給應(yīng)用程序發(fā)送一個(gè)消息。 ??? ?? 好處:Asp.net應(yīng)用程序不必定時(shí)拉數(shù)據(jù)庫(kù)的修改。 ??? ?? 缺點(diǎn):查詢類型有諸多限制(如必須使用兩部分的表明:abo.mytabel,查詢必須包含一個(gè)顯示的列名表明:不能使用*,不能引用視圖、臨時(shí)表等,不能包含子查詢、外連接、子連接,不能引用大對(duì)象、不能使用DISTINCT、COMPUTE、COMPUTE BY、INSERT關(guān)鍵字、不能包含許多聚合函數(shù) 等等) ??? ?? 1.為推SQL緩存依賴配置數(shù)據(jù)庫(kù) ??? ?? 啟用Ms SQL Server 2005 Service Broker: ??? ?? a、可以通過(guò):Select name ,is_broker_enabled from sys_databases,查詢是否對(duì)特定的數(shù)據(jù)庫(kù)激活。 ??? ?? b、通過(guò):Alter Database MyBase Set ENABLE_BROKER,啟用。 ??? ?? c、為本地AspNet帳號(hào)賦予需要的權(quán)限,如:Grant Subscribe Query Notifications To “yourserver\Aspnet” ??? ?? 2.為推SQL緩存依賴配置應(yīng)用程序 ??? ?? void Application_Start(object sender, EventArgs e) ??? ?? { ??? ?? ?? ?? string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString; ??? ?? ?? ?? SqlDependency.Start(conString); ??? ?? ?? ?? HttpContext context=HttpContext.Current; ??? ?? ?? ?? context.Cache.Insert( ??? ?? ?? ?? "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null ??? ??? ??? ); ??? ??? } ?? ?? a、對(duì)頁(yè)面輸出緩存使用推SQL緩存依賴 : ??? ?? 當(dāng)緩存整個(gè)Asp.net頁(yè)面時(shí),可以使用推Sql緩存依賴。如果包含在頁(yè)面上的任何Sql命令的結(jié)果有變動(dòng),頁(yè)面就會(huì)自動(dòng)從緩存中過(guò)期。 ??? ?? SqlCommand對(duì)象包含一個(gè)NotificationAutoEnlist屬性,該屬性默認(rèn)值為true。當(dāng)NotificationAutoEnlist啟用時(shí),頁(yè)面和命令間自動(dòng)創(chuàng)建一個(gè)推緩存依賴。注意SqlDataSource的SelectCommand必須符合查詢要求。 ??? ?? ??? b、對(duì)DataSource控件使用推SQL緩存依賴 : ??? ?? 只需要設(shè)置SqlcacheDependency屬性即可。設(shè)置SqlCacheDependency=“CommandNotification” ??? ?? ??? c、對(duì)Cache對(duì)象使用推SQL緩存依賴 : ??? ?? void Page_Load() ??? ??? { ??? ?? ?? ?? DataTable dt=(DataTable)Cache["dtkey"]; ??? ?? ?? ??? if(dt==null) ??? ?? ?? ?? ?? { ??? ?? ?? ?? ?? ?? ?? string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionString; ??? ?? ?? ?? ?? ?? ?? SqlDatadapter dad=new SqlDataAdapter("Select a,b From dbo.Mytable",conString); //注意查詢符合要求 ??? ?? ?? ?? ?? ?? ?? SqlCacheDependency sqlDepend=new SqlCacheDependecy(dad.SelectCommand); ??? ?? ?? ?? ?? ?? ?? dt=new DataTable(); ??? ?? ?? ?? ?? ?? ?? dad.Fill(dt); ??? ?? ?? ?? ?? ?? ?? Cache.Insert("dtKey",dt,sqlDepend); ??? ??? ??? ???? } ??? ?? ?? ?? ?? GridView1.DataSource=dt; ??? ?? ?? ?? ?? GridView1.DataBind(); ??? ??? } ??? ?? 注意,SqlCacheDependency類的示例被創(chuàng)建了。一個(gè)SqlCommand對(duì)象被傳遞給SqlCacheDependency類的構(gòu)造函數(shù)。如果SqlCommand的結(jié)果變化了,則這個(gè)DataTable會(huì)自動(dòng)從緩存中失效。這些命令的順序很重要。必須在執(zhí)行該命令之前創(chuàng)建SqlCacheDependency對(duì)象。如果在創(chuàng)建SqlCacheDependency對(duì)象之前調(diào)用Fill()方法,則依賴會(huì)被忽略。 ??? ?? 至此,有關(guān)緩存的總結(jié),已經(jīng)結(jié)束,本章只包含了一些知識(shí)要點(diǎn),具體應(yīng)用還要是情況對(duì)待。
轉(zhuǎn)載于:https://www.cnblogs.com/zhy4606/archive/2008/08/28/1278350.html
總結(jié)
以上是生活随笔 為你收集整理的[转]ASP.Net缓存总结 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。