ASP.NET緩存技術(shù)
出處:李用江 發(fā)布于:2011-08-31 15:34:49
摘 要: 介紹了ASP.NET中各種緩存技術(shù)的應(yīng)用程序模型,并重點(diǎn)分析了每種應(yīng)用模型的優(yōu)缺點(diǎn)及其適用范圍。
隨著經(jīng)濟(jì)化的發(fā)展,許多公司面對(duì)客戶和市場(chǎng)需求的變化,需要構(gòu)建足夠強(qiáng)大、靈活、可伸縮的信息系統(tǒng)來支撐迅速增加的大量無規(guī)律性的訪問和Web流量。
ASP 是一項(xiàng)微軟公司的技術(shù),是一種使嵌入網(wǎng)頁(yè)中的腳本可由因特網(wǎng)服務(wù)器執(zhí)行的服務(wù)器端腳本技術(shù)。 指 Active Server Pages(動(dòng)態(tài)服務(wù)器頁(yè)面) ,運(yùn)行于 IIS 之中的程序 。ASP.NET的前身ASP技術(shù),是在IIS 2.0上首次推出(Windows NT 3.51),當(dāng)時(shí)與 ADO 1.0 一起推出,在IIS 3.0 (Windows NT 4.0)發(fā)揚(yáng)光大,成為服務(wù)器端應(yīng)用程序的熱門開發(fā)工具,微軟還特別為它量身打造了Visual InterDev開發(fā)工具,在1994年到2000年之間,ASP技術(shù)已經(jīng)成為微軟推展Windows NT 4.0平臺(tái)的關(guān)鍵技術(shù)之一,數(shù)以萬計(jì)的ASP網(wǎng)站也是這個(gè)時(shí)候開始如雨后春筍般的出現(xiàn)在網(wǎng)絡(luò)上。它的簡(jiǎn)單以及高度可定制化的能力,也是它能迅速崛起的原因之一。
性能是Web應(yīng)用程序成功與否的關(guān)鍵因素,響應(yīng)時(shí)間則是性能的一個(gè)重要指標(biāo),尤其是從用戶的角度來看,隨著同時(shí)訪問的用戶數(shù)的增加,Web應(yīng)用程序的響應(yīng)時(shí)間也會(huì)相應(yīng)增加,當(dāng)其增加到用戶無法接受的程度時(shí),用戶便會(huì)失去耐心而離開該網(wǎng)站。根據(jù)Zona Research的研究指出,如果使用者等待網(wǎng)頁(yè)的時(shí)間超過8 s,將有30%的用戶選擇停止瀏覽網(wǎng)頁(yè),同樣的研究表明,如果網(wǎng)頁(yè)的時(shí)間縮短1 s,則這個(gè)數(shù)字將從30%降低到8%。由此可見終端用戶所感到的時(shí)間延遲(user-perceivedlatency)已經(jīng)成為今天Internet的主要性能問題。
要開發(fā)高性能、可縮放的 Web 應(yīng)用程序,的方法是在首次請(qǐng)求項(xiàng)時(shí)將這些項(xiàng)存儲(chǔ)在Web服務(wù)器上或請(qǐng)求流中的其他軟件上,從而避免重新創(chuàng)建滿足先前請(qǐng)求的信息,可節(jié)省時(shí)間和資源。這就要使用數(shù)據(jù)緩存功能。ASP.NET提供了許多緩存功能。為了知道應(yīng)用程序應(yīng)該用哪一種緩存功能,需要了解將要開發(fā)的應(yīng)用程序的結(jié)構(gòu)和每種緩存功能的工作特點(diǎn)及其優(yōu)缺點(diǎn)。作者在軟件開發(fā)過程中,積累了有關(guān)這方面的一些經(jīng)驗(yàn),現(xiàn)整理出來供大家參考。
1 緩存數(shù)據(jù)的分類
ASP.NET的緩存服務(wù)是一種提高服務(wù)器性能、降低服務(wù)器資源浪費(fèi)的有效方法。對(duì)于安全性要求高的應(yīng)用程序,采用在WEB服務(wù)器上維護(hù)緩存數(shù)據(jù)的方式可以有效地提高頁(yè)面性能。ASP.NET的緩存對(duì)各個(gè)應(yīng)用來說是私有的,是存儲(chǔ)各種對(duì)象的存儲(chǔ)器,緩存的生存周期取決于應(yīng)用的生存周期,當(dāng)應(yīng)用重新啟動(dòng)時(shí),緩存實(shí)際上已重建。利用ASP.NET的緩存功能,結(jié)合性能良好的存儲(chǔ)過程,性地緩存數(shù)據(jù)庫(kù)數(shù)頁(yè)數(shù)據(jù),以供用戶分頁(yè)查詢,是優(yōu)化Web數(shù)據(jù)查詢性能的比較理想的方式。
在Web應(yīng)用程序中,由于變量的生命周期受限于網(wǎng)頁(yè),所以,每當(dāng)。aspx文件被解釋執(zhí)行后,變量的內(nèi)容將不復(fù)存在。為將變量的內(nèi)容保存下來,簡(jiǎn)單的方法是使用緩存來存儲(chǔ)變量的值。ASP.NET提供了輸出緩存和應(yīng)用程序數(shù)據(jù)緩存二種方案,用來創(chuàng)建高性能Web應(yīng)用程序的緩存類型[2]。
緩存數(shù)據(jù)按其所在網(wǎng)絡(luò)節(jié)點(diǎn)位置的不同可以分為三類[1][6]:(1)在客戶端緩存數(shù)據(jù)。(2)在Web服務(wù)器上維護(hù)緩存數(shù)據(jù)。(3)在數(shù)據(jù)庫(kù)中維護(hù)緩存數(shù)據(jù)。它是用數(shù)據(jù)庫(kù)儲(chǔ)存Web應(yīng)用程序的全局或會(huì)話數(shù)據(jù)的一種方式。
2 各種緩存技術(shù)的應(yīng)用模型
2.1 無狀態(tài)方式——不維護(hù)緩存狀態(tài)
在軟件開發(fā)中,并非必須使用緩存來保存數(shù)據(jù),完全可以通過Web應(yīng)用程序的ASP.NET代碼執(zhí)行查詢并用綁定控件將結(jié)果轉(zhuǎn)換為HTML,從而避免緩存數(shù)據(jù),使ASP.NET代碼完全是無狀態(tài)的。
(1)優(yōu)點(diǎn):由于不需要在ASP.NET代碼中緩存數(shù)據(jù),所以應(yīng)用程序的每位用戶需要的內(nèi)存是的。如果單純從內(nèi)存使用的角度看,這種方式有伸縮性。
(2)缺點(diǎn):應(yīng)用程序的性能差。假設(shè)應(yīng)用程序是一個(gè)在線目錄,則需要在所有頁(yè)上顯示產(chǎn)品目錄列表。如果每次用戶訪問頁(yè)時(shí)都對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢以得到產(chǎn)品目錄的列表,則將浪費(fèi)寶貴的數(shù)據(jù)庫(kù)連接資源,降低系統(tǒng)的性能。
2.2 在客戶端緩存數(shù)據(jù)
這類方法通常是利用瀏覽器(如Explorer)本身固有的緩存機(jī)制來實(shí)現(xiàn)的。瀏覽器把一定時(shí)間內(nèi)用戶訪問過的文檔或數(shù)據(jù)都存儲(chǔ)起來,當(dāng)用戶重新訪問同樣的信息時(shí)就可以從瀏覽器的緩存中取出,而不需要重新建立HTTP連接。但是,由于必須將信息發(fā)送到客戶端進(jìn)行存儲(chǔ),因此這種方式可以存儲(chǔ)的信息量存在一定的客觀限制。
2.2.1 Cookie
Cookie是由服務(wù)器端生成,發(fā)送給User-Agent(一般是瀏覽器),瀏覽器會(huì)將Cookie的key/value保存到某個(gè)目錄下的文本文件內(nèi),下次請(qǐng)求同一網(wǎng)站時(shí)就發(fā)送該Cookie給服務(wù)器(前提是瀏覽器設(shè)置為啟用cookie)。Cookie名稱和值可以由服務(wù)器端開發(fā)自己定義,對(duì)于JSP而言也可以直接寫入jsessionid,這樣服務(wù)器可以知道該用戶是否合法用戶以及是否需要重新登錄等。
Cookie 用于在客戶端上存儲(chǔ)少量經(jīng)常更改的信息。許多Web站點(diǎn)用Cookie在客戶端儲(chǔ)存用戶信息,這些信息與請(qǐng)求一起發(fā)送到服務(wù)器。ASP.NET的Request和Response對(duì)象都公開一個(gè)Cookies集合,可以用它在服務(wù)器和客戶端往返行程之間儲(chǔ)存和獲取信息。
(1)優(yōu)點(diǎn):①簡(jiǎn)單。Cookie是具有簡(jiǎn)單鍵值對(duì)的、輕量的、基于文本的結(jié)構(gòu)。②可伸縮性好。不需要任何服務(wù)器資源,在客戶端儲(chǔ)存數(shù)據(jù)使ASP.NET代碼成為無狀態(tài)的,這可改進(jìn)可伸縮性。③可配置到期時(shí)間。可以通過設(shè)置HttpCookie對(duì)象的Expires屬性,控制Cookie的失效時(shí)間。
(2)缺點(diǎn):①儲(chǔ)存量大小受到限制。對(duì)于緩存返回許多行的查詢結(jié)果并不適用。②與瀏覽器安全設(shè)置有關(guān)。在瀏覽器的安全設(shè)置中,可以選擇允許或拒絕創(chuàng)建Cookie,如果瀏覽器選擇禁止接受任何Cookie,則拒絕用Cookie儲(chǔ)存用戶的數(shù)據(jù)。③安全性差。由于用戶可以修改在客戶端儲(chǔ)存的Cookie內(nèi)容,所以不可用來存儲(chǔ)像密碼之類的敏感信息。④持久性。客戶端計(jì)算機(jī)上Cookie的持久性受到客戶端Cookie到期進(jìn)程以及用戶干預(yù)的制約。
2.2.2 隱藏域
可以在頁(yè)上的隱藏域中存儲(chǔ)特定于頁(yè)的信息,方法類似于Windows窗體中的隱藏控件。ASP.NET提供HtmlInputHidden控件,該控件提供隱藏域功能。但使用同它功能類似的ViewState。
(1)優(yōu)點(diǎn):①簡(jiǎn)單。②可伸縮性好。無需服務(wù)器資源,隱藏域在頁(yè)上存儲(chǔ)并讀取。③與瀏覽器安全設(shè)置無關(guān)。幾乎所有瀏覽器和客戶端設(shè)備都支持具有隱藏域的窗體。
(2)缺點(diǎn):①有限的存儲(chǔ)結(jié)構(gòu)。隱藏域不支持豐富的結(jié)構(gòu),隱藏域提供在其中放置信息的單值域。②安全性差。如果直接查看頁(yè)輸出源,可以看到隱藏域中的信息,這導(dǎo)致潛在的安全性問題。③性能降低。由于隱藏域存儲(chǔ)在頁(yè)本身,因此,如果存儲(chǔ)較大的值,則在用戶顯示頁(yè)和發(fā)送頁(yè)時(shí),頁(yè)的速度就可能會(huì)減慢。
2.2.3 視圖狀態(tài)(ViewState)
在System.Web.UI名稱空間的Page類公開了一個(gè)ViewState屬性,它包含一個(gè)類似于名稱/值對(duì)集合的StateBag對(duì)象。ASP.NET頁(yè)框架將ViewState存儲(chǔ)到一個(gè)字符串變量,將它發(fā)送到客戶端并作為隱藏變量返回。在回發(fā)時(shí),頁(yè)框架分析來自隱藏變量的輸入字符串并填充每一控件的ViewState屬性。
(1)優(yōu)點(diǎn):①可伸縮性好。②與瀏覽器安全設(shè)置無關(guān)。ViewState是在頁(yè)代碼內(nèi)結(jié)構(gòu)中的一個(gè)隱藏域中維護(hù),所以,不管瀏覽器的安全設(shè)置如何,都可以用頁(yè)面的ViewState來儲(chǔ)存和獲取數(shù)據(jù)。③儲(chǔ)存量大。頁(yè)面可以在ViewState中保存大項(xiàng)目。④頁(yè)和控件狀態(tài)自動(dòng)保持。
(2)缺點(diǎn):①安全性較低。雖然儲(chǔ)存在ViewState中的數(shù)據(jù)是散列的、壓縮的并且是為Unicode實(shí)現(xiàn)而編碼的,但用戶仍然可以解密儲(chǔ)存在頁(yè)面上的值。②性能降低。如果存儲(chǔ)較大的值,在用戶顯示頁(yè)和發(fā)送頁(yè)時(shí),頁(yè)的速度就可能會(huì)減慢。③儲(chǔ)存數(shù)據(jù)的數(shù)據(jù)類型受限制。在ViewState中,只能儲(chǔ)存ASP.NET代碼清楚如何序列化的數(shù)據(jù),如字符串和整數(shù)這樣的簡(jiǎn)單數(shù)據(jù)類型,但不能儲(chǔ)存一般對(duì)象。盡管如此,它仍然支持ISerializable接口的對(duì)象,如Dataset對(duì)象。
2.3 在Web服務(wù)器上維護(hù)緩存數(shù)據(jù)
這類方法是在Web服務(wù)器上使用內(nèi)存作為緩存空間[6]。當(dāng)服務(wù)器響應(yīng)用戶對(duì)某個(gè)數(shù)據(jù)請(qǐng)求后,在內(nèi)存緩存空間中保留一個(gè)副本,下如果有相同的訪問請(qǐng)求,就直接將緩存空間中的副本提供給用戶。這可加快服務(wù)器的反應(yīng)能力和增加服務(wù)器的吞吐量。服務(wù)器端的緩存機(jī)制能夠減小用戶的訪問延遲,與客戶端緩存相比具有更高的安全性。但可能使用更多的Web服務(wù)器資源,增加了服務(wù)器硬件和軟件的復(fù)雜度,當(dāng)在信息存儲(chǔ)量較大時(shí)限制了應(yīng)用程序的可擴(kuò)展性。
ASP.NET提供了在服務(wù)器上維護(hù)狀態(tài)管理的四種方式。
2.3.1 會(huì)話狀態(tài)(Session)
Page類公開一個(gè)Session屬性,可以在Session中存儲(chǔ)會(huì)話特定的值和對(duì)象,該Session對(duì)象將由服務(wù)器來進(jìn)行管理并可用于瀏覽器或客戶端設(shè)備。存儲(chǔ)在Session變量中的理想數(shù)據(jù)是特定于單獨(dú)會(huì)話的短期的、敏感的數(shù)據(jù),直到用戶的會(huì)話中止。
對(duì)Session的應(yīng)用,要先通過在文件Global.asax中進(jìn)行設(shè)置,然后在。aspx頁(yè)面中進(jìn)行調(diào)用。如可用下面的程序在Global.asax中加上一個(gè)Session_Start方法以定義要響應(yīng)的屬性。
void Session_Start(Object sender,EventArgs e)
{
Session.Add(″lastvalue″,0);
}
賦予屬性一個(gè)初值,這樣當(dāng)在頁(yè)面(。aspx)裝入時(shí)直接使用這個(gè)默認(rèn)值。對(duì)Session值的應(yīng)用類似于對(duì)變量的使用(如Position=(int)Session[″lastvalue″]+1;),如果用它存儲(chǔ)數(shù)據(jù)集,則必須將其從Object強(qiáng)制轉(zhuǎn)換回?cái)?shù)據(jù)集。
(1)優(yōu)點(diǎn):①易于實(shí)現(xiàn)。Session為ASP開發(fā)人員所熟悉,并且與其他。NET框架類一致。②安全性高。數(shù)據(jù)是由Web服務(wù)器而不是在瀏覽器中維護(hù)的,用戶不能通過瀏覽器來訪問或修改Session中的內(nèi)容。③與瀏覽器安全設(shè)置無關(guān)。Session可用于不支持HTTP Cookie的瀏覽器。④獨(dú)立性好。每個(gè)用戶的會(huì)話設(shè)置是分開的,不可共享。⑤會(huì)話特定的事件。會(huì)話管理事件可以由應(yīng)用程序引發(fā)和使用。⑥持久性。放置于會(huì)話狀態(tài)變量中的數(shù)據(jù)在經(jīng)過Internet信息服務(wù)(IIS)重新啟動(dòng)和輔助進(jìn)程重新啟動(dòng)后,會(huì)話數(shù)據(jù)不會(huì)丟失。⑦平臺(tái)可縮放性。會(huì)話狀態(tài)對(duì)象可在多計(jì)算機(jī)和多進(jìn)程配置中使用,因而優(yōu)化了可縮放性方案。
(2)缺點(diǎn):①可伸縮性差。應(yīng)用程序的每個(gè)會(huì)話都要在服務(wù)器上占用一定的資源,當(dāng)有大量訪問Web應(yīng)用程序的用戶時(shí),就應(yīng)考慮要使用的服務(wù)器資源總量。②性能降低。Session變量在被移除或替換前保留在內(nèi)存中,如果其中包含類似大型數(shù)據(jù)集的信息塊,則可能會(huì)因服務(wù)器負(fù)荷的增加而降低Web服務(wù)器的性能。
2.3.2 應(yīng)用程序狀態(tài)(Application)
ASP.NET通過HttpApplicationState類將Application提供為一種存儲(chǔ)全局應(yīng)用程序特定信息的方法。Application對(duì)象與Session對(duì)象類似,不同的是通過頁(yè)面的Application屬性取得的數(shù)據(jù)是所有會(huì)話所共享的。插入到Application變量的理想數(shù)據(jù)是那些由多個(gè)會(huì)話共享并且不經(jīng)常更改的數(shù)據(jù)。
(1)優(yōu)點(diǎn):①易于實(shí)現(xiàn)。②與瀏覽器安全設(shè)置無關(guān)。③共享性高。因?yàn)閮?chǔ)存在Application中的數(shù)據(jù)對(duì)應(yīng)用程序的所有會(huì)話都是可用的,所以它是儲(chǔ)存所有會(huì)話都能使用的穩(wěn)定性數(shù)據(jù)(如產(chǎn)品目錄列表)的理想位置。
(2)缺點(diǎn):①可伸縮性差。②持久性。因?yàn)樵贏pplication中存儲(chǔ)的全局?jǐn)?shù)據(jù)是易失的,所以如果包含這些數(shù)據(jù)的 Web服務(wù)器進(jìn)程被損壞,將丟失這些數(shù)據(jù)。③全局范圍。在Application中存儲(chǔ)的變量?jī)H對(duì)于該應(yīng)用程序正在其中運(yùn)行的特定進(jìn)程而言是全局的,并且每一應(yīng)用程序進(jìn)程可能具有不同的值。因此,不能依賴Application來存儲(chǔ)惟一值或更新網(wǎng)絡(luò)園和網(wǎng)絡(luò)場(chǎng)配置中的全局計(jì)數(shù)器。④性能降低。當(dāng)服務(wù)器負(fù)載增加時(shí),就會(huì)降低Web服務(wù)器的性能,但比在Session中維護(hù)數(shù)據(jù)的情況要好。
2.3.3 Cache
如果對(duì)微型計(jì)算機(jī)硬件系統(tǒng)有足夠的了解,那么我們對(duì)于Cache這個(gè)名詞一定是耳熟能詳?shù)摹T贑PU以及主板的芯片中,都引入了這種名為高速緩沖存儲(chǔ)器(Cache)的技術(shù)。因?yàn)镃ache的存取速度比內(nèi)存快,因而引入Cache能夠有效的解決CPU與內(nèi)存之間的速度不匹配問題。硬件系統(tǒng)可以利用Cache存儲(chǔ)CPU訪問概率高的那些數(shù)據(jù),當(dāng)CPU需要訪問這些數(shù)據(jù)時(shí),可以直接從Cache中讀取,而不必訪問存取速度相對(duì)較慢的內(nèi)存,從而提高了CPU的工作效率。軟件設(shè)計(jì)借鑒了硬件設(shè)計(jì)中引入緩存的機(jī)制以改善整個(gè)系統(tǒng)的性能,尤其是對(duì)于一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的Web應(yīng)用程序而言,緩存的利用是不可或缺的,畢竟,數(shù)據(jù)庫(kù)查詢可能是整個(gè)Web站點(diǎn)中調(diào)用頻繁但同時(shí)又是執(zhí)行緩慢的操作之一,我們不能被它老邁的雙腿拖緩我們前進(jìn)的征程。緩存機(jī)制正是解決這一缺陷的加速器。
Page對(duì)象公開一個(gè)Cache屬性,可以將Cache對(duì)象想象為更健壯的Application對(duì)象。儲(chǔ)存在Cache中的數(shù)據(jù)對(duì)應(yīng)用程序的所有會(huì)話都是可用的。可以像對(duì)Application對(duì)象一樣訪問和修改Cache對(duì)象的內(nèi)容[3]。
但在通過Add或者Insert方法向Cache添加項(xiàng)目時(shí),Cache對(duì)象還提供了下面的附加功能:
(1)可以通過提供具體值(DateTime)或者相對(duì)值(Time-
Span)來指定何時(shí)從緩存中刪除該項(xiàng)。
(2)可以指定CacheDependancy,它會(huì)在dependent項(xiàng)改變時(shí)迫使項(xiàng)從緩存中刪除。
(3)可以指定當(dāng)項(xiàng)從緩存中被刪除時(shí),ASP.NET要調(diào)用的回調(diào)函數(shù)。
使用Cache對(duì)象的優(yōu)點(diǎn)及缺點(diǎn)與Application對(duì)象的很相似,只是Cache對(duì)象還提供了額外的緩存刪除功能。
下面給出一個(gè)使用Cache存儲(chǔ)大數(shù)據(jù)的示例。在下面的Web表單中,對(duì)次請(qǐng)求從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù),并把它存入到應(yīng)用程序緩存。將Dataset加入緩存時(shí),設(shè)置5分鐘的到期限制,以便5分鐘內(nèi)的全部請(qǐng)求都使用緩存的Dataset。對(duì)于緩存Dataset到期之后出現(xiàn)的次請(qǐng)求,數(shù)據(jù)庫(kù)又會(huì)被訪問,新的Dataset開始緩存。為了證實(shí)這一觀點(diǎn),Dataset次被創(chuàng)建,就把“鍵—值”對(duì)加入到DataSet.ExtendedProperties集合中,這是一個(gè)能保存用戶定義的“鍵—值”對(duì)集合。用它可存儲(chǔ)Dataset生成時(shí)間,這樣就可把它顯示到頁(yè)面上。
下面的方法用于在Cache中存儲(chǔ)數(shù)據(jù)并在控件DataGrid1中顯示。
private void datasetshow( )
{/**構(gòu)建新的DataSet,并用Cache的Get的方法的結(jié)果為它賦值,該方法返回匹配指定鍵名的Object實(shí)例,并強(qiáng)制將它轉(zhuǎn)化為一個(gè)DataSet對(duì)象*/
DataSet myDataSet=(DataSet) Cache.Get(″CacheddataSet″);
if (myDataSet==null)
{//dataLocationLabel記錄DataSet所在的位置及時(shí)間
dataLocationLabel.Text=″<p>次來!時(shí)間是:″+
DateTime.Now.ToLongTimeString( )+″</p>″;
myDataSet=new DataSet( );
//登錄數(shù)據(jù)庫(kù)服務(wù)器并填充數(shù)據(jù)集
login(″sa″,myDataSet);
//記錄創(chuàng)建時(shí)間
myDataSet.ExtendedProperties.Add(″creattime″,
DateTime.Now.ToLongTimeString( ));
//在Cache中插入一個(gè)DataSet對(duì)象,設(shè)置5分鐘到期限制Cache.Insert(″CacheddataSet″,myDataSet,null,DateTime.Now.AddMinutes(5),TimeSpan.Zero);
}
else {
dataLocationLabel.Text=″<p>數(shù)據(jù)取自cache中,創(chuàng)建時(shí)間是:″+myDataSet.ExtendedProperties[″creattime″]+″</p>″+″<p>你這次來的時(shí)間是:″+DateTime.Now.ToLongTimeString( )+″</p>″;
}
DataGrid1.DataSource=myDataSet.Tables[″authors″];
DataGrid1.DataBind( );
}
2.3.4 輸出緩存
輸出緩存允許將動(dòng)態(tài)頁(yè)或用戶控件響應(yīng)存儲(chǔ)在輸出流(從發(fā)起服務(wù)器到請(qǐng)求瀏覽器)中任何具備HTTP 1.1緩存功能的設(shè)備上。當(dāng)后面的請(qǐng)求發(fā)生時(shí),不執(zhí)行頁(yè)或用戶控件代碼,緩存的輸出用于滿足該請(qǐng)求。
(1)優(yōu)點(diǎn):如果需要根據(jù)DataSet的內(nèi)容重復(fù)產(chǎn)生同樣的HTML,則輸出緩存就是有效的,因?yàn)樗诜?wù)器端需要的處理更少。與Cache類似,可以控制輸出在緩存中保留的時(shí)間。
(2)缺點(diǎn):就像其他服務(wù)器端緩存功能一樣,輸出緩存仍然會(huì)消耗服務(wù)器上的資源。
2.4 在數(shù)據(jù)庫(kù)中維護(hù)狀態(tài)
當(dāng)應(yīng)用程序執(zhí)行一個(gè)非常復(fù)雜或者相當(dāng)花費(fèi)時(shí)間的查詢時(shí),可以將查詢的結(jié)果儲(chǔ)存在數(shù)據(jù)庫(kù)服務(wù)器上的一個(gè)單獨(dú)數(shù)據(jù)表中,而不是每次在用戶請(qǐng)求下一頁(yè)的結(jié)果時(shí)都要執(zhí)行這個(gè)查詢[1]。
(1)優(yōu)點(diǎn):①無狀態(tài)性。②持久性。可以根據(jù)需要在盡可能長(zhǎng)的時(shí)間內(nèi)存儲(chǔ)數(shù)據(jù)庫(kù)信息,這些信息不受Web服務(wù)器可用性的影響。③安全性高。對(duì)數(shù)據(jù)庫(kù)的訪問要求嚴(yán)格的身份驗(yàn)證和授權(quán),這種訪問通常非常安全。④可伸縮性好、應(yīng)用程序的性能高。使用這種方法即使數(shù)據(jù)量很大,對(duì)應(yīng)用程序的性能影響也不會(huì)大。⑤可靠性和數(shù)據(jù)完整性。數(shù)據(jù)庫(kù)包括多種用于維護(hù)有效的功能,其中包括觸發(fā)器和引用完整性、事務(wù)等。通過在數(shù)據(jù)庫(kù)中(而不是在會(huì)話狀態(tài)等對(duì)象中)保存有關(guān)事務(wù)的信息,可方便地從錯(cuò)誤恢復(fù)。⑥可訪問性。存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)可供多種信息處理工具訪問。
(2)缺點(diǎn):①?gòu)?fù)雜性。使用數(shù)據(jù)庫(kù)支持狀態(tài)管理意味著更復(fù)雜的硬件和軟件配置,這比將數(shù)據(jù)儲(chǔ)存在Session、Application、Cache、ViewState或者Cookie這樣的簡(jiǎn)單對(duì)象或集合中更復(fù)雜。②性能降低。不佳的關(guān)系數(shù)據(jù)模型結(jié)構(gòu)可能導(dǎo)致擴(kuò)展問題,對(duì)數(shù)據(jù)庫(kù)執(zhí)行過多的查詢可能會(huì)影響服務(wù)器性能。
3 結(jié)束語(yǔ)
ASP.net是把基于通用語(yǔ)言的程序在服務(wù)器IIS上運(yùn)行。不像以前的ASP即時(shí)解釋程序,而是將程序在服務(wù)器端首次運(yùn)行時(shí)進(jìn)行編譯,這樣的執(zhí)行效果,當(dāng)然比一條一條的解釋強(qiáng)很多。但是ASP.net也有一個(gè)特點(diǎn),就是每修改程序(即代碼類)必須重新編譯,修改幾次就必須重新編譯幾次,執(zhí)行效果也會(huì)有所降低。
綜上所述,對(duì)于安全性要求高的應(yīng)用程序,應(yīng)當(dāng)使用在Web服務(wù)器上維護(hù)緩存數(shù)據(jù)的方式;伸縮性要求高的應(yīng)用程序,應(yīng)當(dāng)使用在客戶端上維護(hù)緩存數(shù)據(jù)的方式。儲(chǔ)存的數(shù)據(jù)越多,加載頁(yè)面的時(shí)間越長(zhǎng),系統(tǒng)的性能就差。如果需要儲(chǔ)存大量特定于會(huì)話的數(shù)據(jù),在數(shù)據(jù)庫(kù)中儲(chǔ)存數(shù)據(jù)是一種明智的選擇。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 工業(yè)5G技術(shù)在智能制造中的應(yīng)用與實(shí)踐解析2025/12/31 10:57:21
- 工業(yè)以太網(wǎng)交換機(jī)選型與現(xiàn)場(chǎng)應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無線傳輸電路基礎(chǔ),射頻前端設(shè)計(jì)、天線匹配與鏈路預(yù)算計(jì)算2025/10/27 13:55:50
- ASK 解調(diào)的核心要點(diǎn)與實(shí)現(xiàn)方式2025/9/5 16:46:17
- 雙偶極子天線:結(jié)構(gòu)、特性與應(yīng)用全解析2025/9/3 10:29:21
- 高速PCB阻抗控制核心實(shí)操規(guī)范
- 高速數(shù)字系統(tǒng)(如DDR、SerDes)中的信號(hào)完整性濾波
- MOSFET在UPS電源中的應(yīng)用解析
- 電源管理IC在物聯(lián)網(wǎng)設(shè)備中的應(yīng)用
- SMT連接器焊接缺陷分析
- MOSFET在汽車電子中的應(yīng)用要求
- 通信設(shè)備電源管理IC應(yīng)用解析
- 通信設(shè)備連接器選型與設(shè)計(jì)
- PCB電磁兼容性(EMC)設(shè)計(jì)核心實(shí)操規(guī)范
- 物聯(lián)網(wǎng)節(jié)點(diǎn)低功耗設(shè)計(jì):信號(hào)鏈中的濾波與功耗管理









