日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ASP.NET緩存初探使用得當(dāng)是關(guān)鍵

緩存是在內(nèi)存存儲數(shù)據(jù)的一項(xiàng)技術(shù),也是ASP.NET中提供的重要特性之一,對于程序員來講,了解ASP.NET緩存的工作原理對于其設(shè)計(jì)程序是非常有用的。

創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司,提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

ASP.NET需要被緩存的對象多種多樣,包括從數(shù)據(jù)庫中提取出來的數(shù)據(jù),以及aspx頁面生成的靜態(tài)頁,甚至是編譯好的程序集。合理利用緩存能讓ASP.NET的性能大幅提升,下面將對ASP.NET中的緩存機(jī)制進(jìn)行簡單概述。

緩存的分類

在ASP.NET中,大部分緩存機(jī)制是保存在cache對象中,也就是服務(wù)器內(nèi)存的一部分。當(dāng)用戶請求數(shù)據(jù)時(shí),如果數(shù)據(jù)已經(jīng)被緩存,則用戶所提取的數(shù)據(jù)直接從服務(wù)端返回,而不是從數(shù)據(jù)庫等底層數(shù)據(jù)庫提取。這對性能的提升不得不說很有幫助。下面來看ASP.NET中幾種緩存機(jī)制。

程序集緩存

簡單的說,這種緩存是ASP.NET自帶的,無需開發(fā)人員進(jìn)行參與的緩存方式。即當(dāng)***次請求服務(wù)器時(shí),Page類以及相關(guān)程序集被編譯,當(dāng)下次請求時(shí),訪問緩存后的編譯而不是重新編譯。CLR會自動檢測代碼的改變,如果代碼改變后,當(dāng)下次訪問時(shí),相關(guān)代碼會被重新編譯。

數(shù)據(jù)源緩存

數(shù)據(jù)源緩存,顧名思義,也就是利用數(shù)據(jù)源控件對獲取的數(shù)據(jù)進(jìn)行緩存的方式。這些控件包括SqlDataSource,ObjectDataSource等,作為抽象類的DataSourceControl暴漏了如下屬性用于緩存:

CacheDuration獲取或設(shè)置以秒為單位的一段時(shí)間,數(shù)據(jù)源控件就在這段時(shí)間內(nèi)緩存 SelectMethod 屬性檢索到的數(shù)據(jù);CacheExpirationPolicy獲取或設(shè)置緩存的到期行為,該行為與持續(xù)時(shí)間組合在一起可以描述數(shù)據(jù)源控件所用緩存的行為;CacheKeyDependency獲取或設(shè)置一個(gè)用戶定義的鍵依賴項(xiàng),該鍵依賴項(xiàng)鏈接到數(shù)據(jù)源控件創(chuàng)建的所有數(shù)據(jù)緩存對象;EnableCaching 獲取或設(shè)置一個(gè)值,該值指示 ObjectDataSource 控件是否啟用數(shù)據(jù)緩存。

而使用起來就非常簡單了,只需要將緩存的相關(guān)屬性進(jìn)行設(shè)置即可。比如我想要當(dāng)前數(shù)據(jù)源緩存10秒,只需要設(shè)置EnableCaching屬性和CacheDuration屬性如下,這種方式的工作原理可以用下圖表示:

SQL Cache Dependency

大家應(yīng)該注意到了上面的數(shù)據(jù)源控件還暴漏了CacheKeyDependency屬性,這是用于實(shí)現(xiàn)SQL Cache Dependency的方式,關(guān)于Dependency,其實(shí)就是在數(shù)據(jù)庫表內(nèi)容改變時(shí),將相應(yīng)的緩存進(jìn)行更新,正如Dependency這個(gè)詞的意思一樣,是緩存依賴底層數(shù)據(jù)庫。下面就要說到兩種實(shí)現(xiàn)SQL Cache Dependency的方法了。 #p#

方法一:使用輪流查詢機(jī)制(polling-based)

這種方式實(shí)現(xiàn)機(jī)制是在sql server中插入以AspNet_SqlCacheNotification_Trigger開頭的一個(gè)特殊的表和5個(gè)存儲過程,當(dāng)被監(jiān)測的表數(shù)據(jù)發(fā)生改變時(shí),則一個(gè)名為AspNet_SqlCacheTablesForChangeNotification的表被更新,而ASP.NET程序會根據(jù)用戶設(shè)置的間隔時(shí)間每隔一定時(shí)間檢查一下數(shù)據(jù)庫內(nèi)容是否更新,如果更新,則將緩存中的數(shù)據(jù)進(jìn)行跟新。

使用起來就很簡單了,可以在頁面頭部的OutputCache指令中設(shè)置,會社DataSource空間中進(jìn)行設(shè)置,設(shè)置格式為:“數(shù)據(jù)庫名:表名”.里面的表名即是需要監(jiān)測是否改變的表名,示例如下:

 
 
 
 
  1. <%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="DatabaseName:tableName" %>

如果需要添加多個(gè)表,則用”;”進(jìn)行分割

 
 
 
 
  1. SqlDependency="database:table;database:table"

方法二:使用通知機(jī)制(notification-based)

使用通知機(jī)制配置起來要簡便很多,但是sql server的版本需要9.0以上,也就是sql server 2005,使用這種方式需要將sql server的通知服務(wù)開啟,使用通知機(jī)制可以對頁面進(jìn)行緩存,也可以對datasouce控件進(jìn)行緩存,對頁面進(jìn)行緩存代碼如下:

 
 
 
 
  1. <%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="CommandNotification" %>

注意SqlDependency必須設(shè)置成CommandNotification,對于datasource控件,也是同樣:

 
 
 
 
  1. ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>" 
  2. SelectCommand="SELECT top 10 * FROM [Person].[Contact]" EnableCaching="true" CacheDuration="10" SqlCacheDependency="CommandNotification">

輸出緩存(output Caching)

輸出緩存是頁面級別的緩存,是將aspx頁面內(nèi)容在***次請求后生成的靜態(tài)頁放入緩存,在不過期時(shí)間內(nèi)每一次請求時(shí)從緩存中返回靜態(tài)頁,而不是重新走完ASP.NET的生命周期??梢詫⒖梢酝ㄟ^在頁面頭部加入OutputCache指令實(shí)現(xiàn),也可以通過HttpCachePolicy類實(shí)現(xiàn),輸出緩存可以緩存整個(gè)頁面,也可以緩存部分頁面,緩存頁面的一部分是通過用戶控件來實(shí)現(xiàn),下面來看通過OutputCache指令實(shí)現(xiàn)頁面緩存,前面已經(jīng)看到,這種方式十分簡單,下面說一下OutputCache的重點(diǎn)屬性:

Duration

頁面過期的時(shí)間,單位為秒。超過過期時(shí)間后,則在下一次請求時(shí)頁面會重新生成并緩存。

 
 
 
 
  1. VaryByHeader
  2. VaryByCustom
  3. VaryByParam
  4. VaryByControl
  5. VaryByContentEncodings

這些屬性都是為了保存頁面的多個(gè)版本,比如說一個(gè)頁面用于顯示產(chǎn)品,則根據(jù)產(chǎn)品id的不同,緩存同一個(gè)頁面的不同版本。 #p#

CacheProfile

這個(gè)選項(xiàng)有些像連接字符串,作用只是將具體的緩存選項(xiàng)變成對于選項(xiàng)的引用,比如我們在Web.Config放入如下代碼:

 
 
 
 
  1.         
  2.           
  3.             
  4.                   enabled="true"
  5.                   duration="60"
  6.                    varyByParam="product:id"/>
  7.           
  8.         

則在引用時(shí)只需要在頁面頭部設(shè)置如下:

 
 
 
 
  1. <%@ OutputCache CacheProfile="CacheProfile" %>

DiskCacheable

因?yàn)榉?wù)器內(nèi)存是有限的,所以通過將DiskCacheable屬性設(shè)置為true,則可以將緩存頁面放入硬盤中,這樣即使服務(wù)器崩潰重啟,緩存依然存在。

緩存部分頁面

緩存頁面的一部分實(shí)現(xiàn)原理和緩存整個(gè)頁面毫無二致,都是在頁面頭部加入OutputCache指令,***的不同是緩存部分頁面是在用戶控件中進(jìn)行的。這部分就不在多說了。

使用HttpCachePolicy緩存頁面

前面已經(jīng)說了通過OutputCache指令在頁面頭部設(shè)置緩存選項(xiàng),另一種替代方法是使用HttpCachePolicy類,這個(gè)類的實(shí)例是Response.Cache.如果使用HttpCachePolicy設(shè)置緩存,則需要在頁面移除OutputCache指令。比如:

 
 
 
 
  1. <%@ OutputCache  Duration="30" VaryByParam="state;city" %>

和下面代碼是等價(jià)的:

 
 
 
 
  1. Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));
  2. Response.Cache.VaryByParams["state"] = true;
  3. Response.Cache.VaryByParams["city"] = true;

對象緩存

對象緩存是將繼承與System.Object的對象緩存在服務(wù)器的內(nèi)存中,通過Page類的Cache屬性可以訪問到Cache集合。Cache內(nèi)可以放任何類型的對象,但是要小心使用Cache,因?yàn)镃ache是占用服務(wù)器內(nèi)存,如果使用不當(dāng),也許會拖累性能。使用Cache的例子:

 
 
 
 
  1. //save object into Cache
  2. Cache["table"] = GridView1;
  3. //get object from Cache
  4. GridView gv = (GridView)Cache["table"];

要注意的是,再提取緩存中的對象時(shí),一定別忘了強(qiáng)制轉(zhuǎn)換。


新聞名稱:ASP.NET緩存初探使用得當(dāng)是關(guān)鍵
文章鏈接:http://m.5511xx.com/article/copjoec.html