偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

全面介紹ASP.NET緩存

開(kāi)發(fā) 后端
本文全面介紹ASP.NET緩存,包ASP.NET緩存引擎類(lèi)型,整頁(yè)輸出緩存,部分緩存和數(shù)據(jù)緩存等。

要提升ASP.NET應(yīng)用程序的性能,最簡(jiǎn)單、最有效的方式就是使用內(nèi)建的緩存引擎。雖然也能構(gòu)建自己的緩存,但由于緩存引擎已提供了如此多的功能,所以完全不必如此麻煩。在很大程度上,ASP.NET開(kāi)發(fā)者在Web應(yīng)用程序中,能將緩存引擎的功能直接包裝到自己的數(shù)據(jù)表示及訪問(wèn)類(lèi)中。如本文所述,整個(gè)過(guò)程其實(shí)非常簡(jiǎn)單。

ASP.NET緩存引擎類(lèi)型

整頁(yè)輸出緩存是在一個(gè)頁(yè)被***請(qǐng)求時(shí),將整個(gè)頁(yè)呈現(xiàn)好的HTML內(nèi)容緩存下來(lái)。后續(xù)請(qǐng)求將直接取用緩存拷貝。
部分緩存是指緩存一部分HTML內(nèi)容,這類(lèi)似一個(gè)Web用戶(hù)控件的輸出。之所以叫這樣的一個(gè)名字,是因?yàn)槲覀円话阏f(shuō)“將一部分HTML提交給一個(gè)頁(yè)”。

數(shù)據(jù)緩存關(guān)注的是單獨(dú)的變量或數(shù)據(jù)項(xiàng)的緩存。它在比以上兩種緩存類(lèi)型都要低的一個(gè)級(jí)別上工作。

整頁(yè)輸出緩存

整頁(yè)輸出緩存是最簡(jiǎn)單的緩存類(lèi)型,它只要求為準(zhǔn)備緩存的頁(yè)添加一個(gè)預(yù)處理指令 OutputCache。使用這種緩存,就不必重新處理一個(gè)頁(yè)的Init, Load,PreRender,Render以及Unload事件。假如那些事件要訪問(wèn)像數(shù)據(jù)庫(kù)那樣的一個(gè)后端系統(tǒng),那么節(jié)省的時(shí)間將是非??捎^的。ASP.NET緩存一個(gè)頁(yè)的幾個(gè)變體,并將每個(gè)頁(yè)都與后續(xù)請(qǐng)求相關(guān)聯(lián)。

部分緩存

部分緩存允許只緩存部分HTML,它的效率很高,因?yàn)橐粋€(gè)頁(yè)中經(jīng)常變化的部分可與那些不經(jīng)常變化部分的部分合并到一起,同時(shí)仍能從緩存中檢索靜態(tài)的部分。一個(gè)實(shí)例是將“部分緩存”應(yīng)用于需要調(diào)用XML Web服務(wù)的Web用戶(hù)控件。這樣可獲得很高的效率,因?yàn)樗苊饬四愕木W(wǎng)站與Web服務(wù)過(guò)度緊密地耦合,同時(shí)還能顯著提升性能。

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

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

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

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

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

ASP.NET緩存引擎支持的***一種緩存類(lèi)型是“數(shù)據(jù)緩存”。根據(jù)定義,它的工作級(jí)別要低于整頁(yè)輸出緩存和部分緩存。假如幾個(gè)網(wǎng)頁(yè)都要使用相同的數(shù)據(jù)(例如一個(gè)產(chǎn)品列表),但要以不同方式來(lái)顯示這些數(shù)據(jù),就可考慮使用這種緩存。當(dāng)然,數(shù)據(jù)緩存之所以具有性能優(yōu)勢(shì),是因?yàn)闇p少了對(duì)后端數(shù)據(jù)庫(kù)的調(diào)用次數(shù)。

為了在緩存中添加一個(gè)項(xiàng),需使用Page或UserControl類(lèi)的Cache屬性,因?yàn)檫@兩個(gè)類(lèi)最終都是從Control類(lèi)派生的。 Cache屬性揭示出了System.Web.Caching.Cache對(duì)象,利用它可將數(shù)據(jù)當(dāng)作鍵和值的一個(gè)組合來(lái)存儲(chǔ)。使用該屬性,開(kāi)發(fā)者可編寫(xiě)代碼來(lái)填充一個(gè)項(xiàng),并把它放到緩存中;如果該項(xiàng)已經(jīng)存在,就直接將其從緩存中取出。如以下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鍵的項(xiàng)是否在緩存中。如果不在,就從后端數(shù)據(jù)庫(kù)檢索一個(gè)ADO.NET DataTable,并使用Insert方法把它放到緩存中。本例使用的是 Insert的一個(gè)重載版本,它允許為緩存對(duì)象指定一個(gè)絕對(duì)過(guò)期時(shí)間(6小時(shí)),而不是指定一個(gè)周期性的過(guò)期。相反,如果緩存中已經(jīng)有這個(gè)項(xiàng),就將其取回,并使用 As表達(dá)式,將其強(qiáng)制轉(zhuǎn)換回一個(gè)DataTable。

對(duì)ADO.NET檢索到的數(shù)據(jù)進(jìn)行緩存時(shí),注意既可像上例那樣緩存DataTable對(duì)象,也可緩存整個(gè) DataSet對(duì)象,因?yàn)閮煞N對(duì)象都同任何數(shù)據(jù)源完全地?cái)嚅_(kāi),不會(huì)保持?jǐn)?shù)據(jù)庫(kù)連接。對(duì)數(shù)據(jù)讀取器(比如 SqlDataReader)進(jìn)行緩存似乎更好一些,因?yàn)樗鼈冎皇褂靡淮危ㄋ鼈兪恰爸贿M(jìn)”的讀取器),而且在打開(kāi)的情況下將一直占據(jù)一個(gè)數(shù)據(jù)庫(kù)連接。

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

【編輯推薦】

  1. ASP.NET中的數(shù)據(jù)源控件
  2. 介紹ASP.NET的XML Web服務(wù)使用
  3. ASP.NET應(yīng)用程序的web.config文件
  4. 概述ASP.NET XML Web服務(wù)
  5. ASP.NET中實(shí)現(xiàn)HTTP請(qǐng)求
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-08-05 10:36:08

開(kāi)發(fā)ASP.NET

2009-08-04 15:58:06

ASP.NET動(dòng)態(tài)控件

2009-07-21 13:30:59

JSP技術(shù)ASP.NET

2009-07-31 10:23:44

緩存頁(yè)面ASP.NET緩存

2009-07-23 14:17:41

2009-07-20 16:12:21

ASP.NET Fra

2009-07-27 17:00:29

ASP.NET主機(jī)

2009-07-29 09:14:36

ASP.NET網(wǎng)站

2009-09-10 14:02:08

LINQ ASP.NE

2009-07-29 10:02:49

ASP.NET上傳

2009-07-21 10:40:36

ASP.NET Pro

2009-07-29 17:26:39

ASP.NET頁(yè)面

2009-07-22 16:05:34

ASP.NET AJA

2009-08-19 09:23:40

ASP.NET Rou

2009-07-29 17:23:17

ASP.NET表單

2009-08-04 15:22:33

ASP.NET緩存機(jī)制

2009-07-29 14:35:34

頁(yè)面輸出緩存ASP.NET

2009-07-31 10:33:54

ASP.NET頁(yè)面輸出

2009-08-03 17:35:07

ASP.NET WebASP.NET編程工具

2009-07-29 09:53:24

ASP.NET異常管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)