亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET緩存策略經驗談

2019-11-17 04:20:41
字體:
來源:轉載
供稿:網友

整頁輸出緩存

要提升asp.net應用程序的性能,最簡單、最有效的方式就是使用內建的緩存引擎。雖然也能構建自己的緩存,但由于緩存引擎已提供了如此多的功能,所以完全不必如此麻煩。在很大程度上,ASP.NET開發者在Web應用程序中,能將緩存引擎的功能直接包裝到自己的數據表示及訪問類中。如本文所述,整個過程其實非常簡單。

ASP.NET的緩存引擎支持三種類型的緩存:


整頁輸出緩存是在一個頁被首次請求時,將整個頁呈現好的HTML內容緩存下來。后續請求將直接取用緩存拷貝。
部分緩存是指緩存一部分HTML內容,這類似一個Web用戶控件的輸出。之所以叫這樣的一個名字,是因為我們一般說“將一部分HTML提交給一個頁”。
數據緩存關注的是單獨的變量或數據項的緩存。它在比以上兩種緩存類型都要低的一個級別上工作。
整頁輸出緩存
整頁輸出緩存是最簡單的緩存類型,它只要求為準備緩存的頁添加一個預處理指令 OutputCache。使用這種緩存,就不必重新處理一個頁的Init, Load,PReRender,Render以及Unload事件。假如那些事件要訪問像數據庫那樣的一個后端系統,那么節省的時間將是非??捎^的。ASP.NET可緩存一個頁的幾個變體,并將每個頁都與后續請求相關聯。所有這些都由 OutputCache預處理指令來控制,該命令要放在一個ASPX頁的頂部,并采用以下格式:


<%@ OutputCache  Duration="#ofseconds"  Location="Any | Client | Downstream | Server | None"  VaryByCustom="browser | customstring"  VaryByHeader="headers"  VaryByParam="parameter name" %>
OutputCache預處理指令最多可利用5個相關的屬性來控制緩存行為。表 A總結了這些屬性及其含義。

表A

屬性 說明
Duration  該屬性指定了網頁要緩存的時間(以秒為單位)。通過為一個頁設置該屬性,可為來自對象HTTP響應建立一個過期策略。這是一個必需屬性。如果不包括它,會發生解析器錯誤。注意它指定的是絕對過期時間,而非周期性過期。
Location 用這個屬性指示Web服務器和下游設備(比如代理服務器和瀏覽器)來緩存頁面內容。默認為Any,該屬性并非必需的。
VaryByParam  該屬性使用由分號分隔的字符串列表來改變輸出緩存。默認情況下,這些字符串對應于隨GET方法屬性發送的查詢字符串值,或對應于使用POST方法發送的一個參數。如果將該屬性設為多個參數,輸出緩存將針對指定的每個參數,包含所請求的文檔的一個不同版本??赡艿闹蛋∟one、*以及任何有效的查詢字符串或POST參數名。如果沒有設置其他屬性,該屬性就是必需的。
VaryByCustom  對自定義輸出緩存需求進行表示的任何文本都要包含在這個屬性中。如果為屬性指派瀏覽器的一個值,緩存會根據瀏覽器名稱及主版本信息而發生變化。如果輸入一個自定義字符串,就必須在應用程序的Global.asax文件中覆蓋GetVaryByCustomString方法。
VaryByHeader  該屬性使用由分號分隔的HTTP標頭列表來改變輸出緩存。如果屬性設為多個標頭,輸出緩存將針對指定的每個標頭,包含所請求文檔的一個不同的版本。

OutputCache屬性


OutputCache預處理指令可在內存中方便地創建靜態頁的單一版本,例如:


<%@ OutputCache Duration=“300" VaryByParam="None" %>
還可根據id查詢字符串參數來緩存多個版本,例如:


<%@ OutputCache Duration=“300" VaryByParam="id" %>
在上述兩個例子中,網頁會在5分鐘(300秒)后從緩存中清除,該數字是由 Duration屬性指定的。

根據自定義信息來緩存


根據自定義信息來緩存
使用VaryByCustom屬性,可根據你提供的自定義信息來創建一個頁的緩存版本。例如,要為每種類型的瀏覽器創建網頁的一個不同版本,可使用以下預處理指令:


<%@ OutputCache
 Duration=“300"
 VaryByParam="None"
 VaryByCustom=“browser”%>
使用VaryByCustom,還可根據應用程序特有的信息來緩存網頁。例如,要根據當前用戶的部門名稱來創建網頁的緩存版本,可使用以下預處理指令:


<%@ OutputCache
 Duration=“300"
 VaryByParam="None"
 VaryByCustom=“department”%>
然后,在用于Global.asax文件的代碼隱藏類中,可覆蓋GetVaryByCustomString方法,如以下VB.NET代碼所示:


Public Overrides Function GetVaryByCustomString( _
 ByVal context As System.Web.HttpContext, _
 ByVal custom As String) As String
 If custom = "department" Then
 ' return the department for the current user
 End If End Function

這里向GetVaryByCustomString方法傳遞了在預處理指令中使用的自定義值。ASP.NET運行庫調用該方法時,你可使用自己的算法,根據輸入值來判斷當前用戶所在的部門,并從方法中返回它。

根據標頭信息來緩存
使用VaryByHeader屬性,可根據網頁接收到的一個或多個HTTP標頭來創建一個網頁的多個緩存版本。例如,要想根據瀏覽器的語言來創建和緩存不同的版本,可使用以下預處理指令:


<%@ OutputCache
 Duration="60"
 VaryByParam="None"
 VaryByHeader="Accept-Language" %>

-------------------------------------------------------------


檢查標頭
要查看隨同特定Web請求發送的各個HTTP標頭的值,可打開ASP.NET頁的跟蹤功能,具體做法是在網頁的 Page預處理指令中設置trace和traceMode屬性。另外,也可通過Visual Studio .NET的屬性頁來設置。


-------------------------------------------------------------


除了聲明性地緩存整個網頁,還可使用由Page類揭示的Response對象的 Cache屬性來程序化地設置一個頁的緩存選項。Cache屬性揭示了用于網頁的 HttpCachePolicy對象,可用它在服務器上將緩存時間設為5分鐘,如以下C# 代碼段所示:


private void Page_Init( object sender, System.EventArgs e ) {            Response.Cache.SetCacheability(HttpCacheability.Server); Response.Cache.SetExpires(DateTime.Now.AddSeconds(300)); Response.Cache.SetValidUntilExpires(True) }
部分緩存


部分緩存
部分緩存允許只緩存部分HTML,它的效率很高,因為一個頁中經常變化的部分可與那些不經常變化部分的部分合并到一起,同時仍能從緩存中檢索靜態的部分。一個實例是將“部分緩存”應用于需要調用xml Web服務的Web用戶控件。這樣可獲得很高的效率,因為它避免了你的網站與Web服務過度緊密地耦合,同時還能顯著提升性能。

要使用部分緩存,同樣可在HTML頁的頂部放置一條OutputCache預處理指令。但這一次,我們準備把它放到Web用戶控件的ASCX頁中。注意使用部分緩存時, Location和VaryByHeader屬性將不再支持,但新增了對VaryByControl屬性的支持。

使用VaryByControl屬性,可用一個由分號分隔的列表來指定用戶控件的一個或多個屬性??蔀閷傩灾档拿恳环N組合來創建緩存的版本。例如,假定你的用戶控件揭示出一個自定義的 State屬性,它控制著要顯示用戶控件的哪些元素。使用以下預處理指令,可針對 State的每個值來緩存控件所具體呈現的一個版本:

<%@ OutputCache Duration="300" VaryByControl="State" %>
但在緩存Web用戶控件時,記住ASP.NET運行庫會直接用緩存的HTML來替換實際控件,忽略平常會發生的任何控件處理。這暗示著在網頁中執行的代碼不能程序化地操縱一個緩存的用戶控件或者它的任何屬性。換言之,Web用戶控件必須能完全自主,并能通過它的 Load和Init事件來初始化自己,以便有效地緩存。

也可聲明性地完成部分緩存,方法是使用一個屬性而不是使用OutputCache預處理指令。在代碼隱藏文件中, PartialCaching屬性可放在從UserControl派生的一個類中,使ASP.NET運行庫能夠讀取它,并相應地緩存呈現好的HTML。例如,以下來自代碼隱藏類的聲明能根據查詢字符串中的 id值,將Web用戶控件緩存5分鐘。


<PartialCaching(300, "id", Nothing, Nothing)> _ Public MustInherit Class MyHeaderControl Inherits System.Web.UI.UserControl
數據緩存


數據緩存
ASP.NET緩存引擎支持的最后一種緩存類型是“數據緩存”。根據定義,它的工作級別要低于整頁輸出緩存和部分緩存。假如幾個網頁都要使用相同的數據(例如一個產品列表),但要以不同方式來顯示這些數據,就可考慮使用這種緩存。當然,數據緩存之所以具有性能優勢,是因為減少了對后端數據庫的調用次數。

為了在緩存中添加一個項,需使用Page或UserControl類的Cache屬性,因為這兩個類最終都是從Control類派生的。 Cache屬性揭示出了System.Web.Caching.Cache對象,利用它可將數據當作鍵和值的一個組合來存儲。使用該屬性,開發者可編寫代碼來填充一個項,并把它放到緩存中;如果該項已經存在,就直接將其從緩存中取出。如以下C#代碼所示。

DataTable dt = null; if (this.Cache["Products"] == null) { // Go get the data from the database this.Cache.Insert("Products", dt, null, _ DateTime.Now.AddHours(6), TimeSpan.Zero); } else { dt = this.Cache["Products"] As DataTable; }
上例首先檢查具有Products鍵的項是否在緩存中。如果不在,就從后端數據庫檢索一個ADO.NET DataTable,并使用Insert方法把它放到緩存中。本例使用的是 Insert的一個重載版本,它允許為緩存對象指定一個絕對過期時間(6小時),而不是指定一個周期性的過期。相反,如果緩存中已經有這個項,就將其取回,并使用 As表達式,將其強制轉換回一個DataTable。

對ADO.NET檢索到的數據進行緩存時,注意既可像上例那樣緩存DataTable對象,也可緩存整個 DataSet對象,因為兩種對象都同任何數據源完全地斷開,不會保持數據庫連接。對數據讀取器(比如 SqlDataReader)進行緩存似乎更好一些,因為它們只使用一次(它們是“只進”的讀取器),而且在打開的情況下將一直占據一個數據庫連接。

ASP.NET緩存引擎強大的靈活性和功能使其成為創建高性能ASP.NET應用程序時最重要的特性之一。根據本文提供的基本信息,你可在自己的應用程序輕松引入緩存引擎功能。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜伦理精品一区| 亚洲美女av在线| 性欧美长视频免费观看不卡| 97在线精品视频| 成人免费视频xnxx.com| 久久精品国产亚洲| 成人在线视频福利| 琪琪第一精品导航| 日韩免费看的电影电视剧大全| 国产成人福利网站| 亚洲精品国产精品国产自| 久久久久久久爱| 国产午夜精品免费一区二区三区| 国产精品黄色av| 色爱av美腿丝袜综合粉嫩av| 日韩免费观看视频| 欧美性感美女h网站在线观看免费| 美女啪啪无遮挡免费久久网站| 91精品视频在线免费观看| 日韩69视频在线观看| 亚洲精品一区二三区不卡| 久久久www成人免费精品张筱雨| 日韩免费av在线| 日韩av综合网| 成人妇女免费播放久久久| 亚洲欧美制服中文字幕| 欧美激情欧美狂野欧美精品| 久久久久女教师免费一区| 影音先锋欧美在线资源| 精品中文字幕视频| 欧美另类老肥妇| 欧美黄色三级网站| 成人免费直播live| 俺去了亚洲欧美日韩| 亚洲国产精品电影在线观看| 欧美日韩美女在线| 国产精品大陆在线观看| 国产精品视频内| 91精品国产777在线观看| 欧美日韩国产精品一区二区不卡中文| 日韩免费中文字幕| 久久久久久久久久久成人| 91色p视频在线| 亚洲欧美中文日韩v在线观看| 国产在线精品播放| 日韩美女在线观看| 久久久久久午夜| 91免费观看网站| 成人国产精品一区二区| 国产小视频91| 国产成人一区二| 久久久综合免费视频| 日本精品中文字幕| 少妇av一区二区三区| 欧美激情第一页xxx| 欧美成人合集magnet| 欧美不卡视频一区发布| 九九视频这里只有精品| 日韩av三级在线观看| 日韩av最新在线| 亚洲japanese制服美女| 高清欧美性猛交xxxx黑人猛交| 亚洲女人被黑人巨大进入| 在线观看日韩av| wwwwwwww亚洲| 精品国产一区二区三区四区在线观看| 91精品视频大全| 亚洲国产精品久久精品怡红院| 亚洲2020天天堂在线观看| 午夜精品蜜臀一区二区三区免费| 一本色道久久88亚洲综合88| 亚洲国产高清高潮精品美女| 国产精品精品一区二区三区午夜版| 亚洲新中文字幕| 欧美亚洲国产精品| 久久欧美在线电影| 91情侣偷在线精品国产| 美日韩精品免费观看视频| 久久精视频免费在线久久完整在线看| 456国产精品| 国产丝袜一区视频在线观看| 中文国产成人精品久久一| 亚洲一区二区三区久久| 色综合久久88| 欧美一级淫片播放口| 午夜精品久久久久久久99黑人| 国产成人高潮免费观看精品| 亚洲最新中文字幕| 欧美成人午夜激情在线| 国产一区二区三区在线观看视频| 国内精品模特av私拍在线观看| 日韩在线视频网| 欧美在线中文字幕| 久久亚洲国产精品| 国产日韩欧美在线播放| 国产91在线高潮白浆在线观看| 成人国产亚洲精品a区天堂华泰| 国产精品高清网站| 日韩av一区在线| 亚洲欧美综合精品久久成人| 亚洲精品白浆高清久久久久久| 色樱桃影院亚洲精品影院| 国产成人精品综合| 日韩欧亚中文在线| 青青久久av北条麻妃海外网| 亚洲一级免费视频| 91在线精品视频| 日韩极品精品视频免费观看| 亚洲精品一区二区在线| 91免费观看网站| 成人免费视频在线观看超级碰| 国内揄拍国内精品少妇国语| 国产精品三级久久久久久电影| 欧美极品xxxx| 欧美另类精品xxxx孕妇| 欧美成人精品xxx| 91国产精品电影| 亚洲国产婷婷香蕉久久久久久| 日韩美女视频在线观看| 亚洲人成电影在线观看天堂色| 亚洲人成网在线播放| 日韩av手机在线| 国产成人91久久精品| 亚洲精品456在线播放狼人| 欧美一区二区视频97| 欧美成人精品在线观看| 日韩av不卡在线| 亚洲国产又黄又爽女人高潮的| 亚洲精品少妇网址| 精品亚洲一区二区三区在线播放| 最近的2019中文字幕免费一页| 亚洲最新av网址| 亚洲va男人天堂| 国产婷婷97碰碰久久人人蜜臀| 亚洲成人精品视频在线观看| 国内精品视频久久| 久久久久免费精品国产| 亚洲国产精品99久久| 久久久国产视频| 亚洲无av在线中文字幕| 国产+人+亚洲| 亚洲成人黄色在线| 亚洲欧美自拍一区| 欧美肥婆姓交大片| 亚洲国语精品自产拍在线观看| 成人在线免费观看视视频| 一区二区三区国产在线观看| 黑人巨大精品欧美一区二区| 亚洲最大的免费| 精品女厕一区二区三区| 亚洲欧美国产日韩中文字幕| 日韩欧美aaa| 国产在线观看精品一区二区三区| 亚洲精品乱码久久久久久按摩观| 国产午夜精品免费一区二区三区| 亚洲欧洲在线视频| 国产盗摄xxxx视频xxx69| 日本久久久久久久久久久| 日韩欧美成人精品| 国产在线精品播放| 性欧美长视频免费观看不卡| 欧美日韩国产区| 日韩av在线网页| 久久久久国产精品免费网站|