ASP.NET緩存的種類及特點(diǎn)淺析
ASP.NET 2.0提供了一些新的用于提升程序性能的技術(shù)特性,其中,緩存技術(shù)是非常重要的一個(gè)特性,它提供了一種非常好的本地?cái)?shù)據(jù)緩存機(jī)制,可以非常容易的定制屬于數(shù)據(jù)緩從,從而有效的提高數(shù)據(jù)訪問(wèn)的性能。
緩存有一個(gè)不太容易克服的缺點(diǎn),那就是數(shù)據(jù)過(guò)期的問(wèn)題。最典型的情況是,如果將數(shù)據(jù)庫(kù)表中的數(shù)據(jù)內(nèi)容緩存到服務(wù)器內(nèi)存中,當(dāng)數(shù)據(jù)庫(kù)表中的記錄發(fā)生更改時(shí),Web應(yīng)用程序則很可能顯示過(guò)期的、不準(zhǔn)確的數(shù)據(jù)。對(duì)于某些類型的數(shù)據(jù),即使顯示的信息過(guò)期,影響也不會(huì)很大。然而,對(duì)于實(shí)時(shí)性要求比較嚴(yán)格的數(shù)據(jù),例如,股票價(jià)格、拍賣出價(jià)之類信息,顯示的數(shù)據(jù)稍有過(guò)期都是不可接受的。
ASP.NET 2.0支持以下幾種緩存
ASP.NET緩存之頁(yè)面輸出緩存
頁(yè)面輸出緩存是最為簡(jiǎn)單的緩存機(jī)制,該機(jī)制將整個(gè) ASP.NET頁(yè)面內(nèi)容保存在服務(wù)器內(nèi)存中。當(dāng)用戶請(qǐng)求該頁(yè)面時(shí),系統(tǒng)從內(nèi)存中輸出相關(guān)數(shù)據(jù),直到緩存數(shù)據(jù)過(guò)期。在這個(gè)過(guò)程中,緩存內(nèi)容直接發(fā)送給用戶,而不必再次經(jīng)過(guò)頁(yè)面處理生命周期。通常情況下,頁(yè)面輸出緩存對(duì)于那些包含不需要經(jīng)常修改內(nèi)容的,但需要大量處理才能編譯完成的頁(yè)面特別有用。需要讀者注意的是,頁(yè)面輸出緩存是將頁(yè)面全部?jī)?nèi)容都保存在內(nèi)存中,并用于完成客戶端請(qǐng)求。
ASP.NET緩存之頁(yè)面部分緩存
頁(yè)面部分緩存是指輸出緩存頁(yè)面的某些部分,而不是緩存整個(gè)頁(yè)面內(nèi)容。實(shí)現(xiàn)頁(yè)面部分緩存有兩種機(jī)制:一種是將頁(yè)面中需要緩存的部分置于用戶控件(.ascx 文件)中,并且為用戶控件設(shè)置緩存功能(包含用戶控件的頁(yè)面可設(shè)置也可不設(shè)置緩存)。這就是通常所說(shuō)的“控件緩存”。設(shè)置控件緩存的實(shí)質(zhì)是對(duì)用戶控件進(jìn)行緩存配置。主要包括以下3種方法:一是使用@ OutputCache指令以聲明方式為用戶控件設(shè)置緩存功能,二是在代碼隱藏文件中使用PartialCachingAttribute類設(shè)置用戶控件緩存;三是使用ControlCachePolicy類以編程方式指定用戶控件緩存設(shè)置。另外,還有一種稱為“緩存后替換”的方法。該方法與控件緩存正好相反,將頁(yè)面中的某一部分設(shè)置為不緩存,因此,盡管緩存了整個(gè)頁(yè)面,但是當(dāng)再次請(qǐng)求該頁(yè)時(shí),將重新處理那些沒(méi)有設(shè)置為緩存的內(nèi)容。
ASP.NET緩存之應(yīng)用程序數(shù)據(jù)緩存
應(yīng)用程序數(shù)據(jù)緩存提供了一種編程方式,可通過(guò)鍵/值對(duì)將任意數(shù)據(jù)存儲(chǔ)在內(nèi)存中。使用應(yīng)用程序緩存與使用應(yīng)用程序狀態(tài)類似。但是,與應(yīng)用程序狀態(tài)不同的是,應(yīng)用程序數(shù)據(jù)緩存中的數(shù)據(jù)是易失的,即數(shù)據(jù)并不是在整個(gè)應(yīng)用程序生命周期中都存儲(chǔ)在內(nèi)存中。應(yīng)用程序數(shù)據(jù)緩存的優(yōu)點(diǎn)是由ASP.NET管理緩存,它會(huì)在項(xiàng)過(guò)期、無(wú)效,或內(nèi)存不足時(shí)移除緩存中的項(xiàng),還可以配置應(yīng)用程序緩存,以便在移除項(xiàng)時(shí)通知應(yīng)用程序。
ASP.NET緩存之緩存依賴
Net 2.0引入的自定義緩存依賴項(xiàng),特別是基于MS-SQL Server的SqlCacheDependency特性,使得我們可以避免“數(shù)據(jù)過(guò)期”的問(wèn)題,它能夠根據(jù)數(shù)據(jù)庫(kù)中相應(yīng)數(shù)據(jù)的變化,通知緩存,并移除那些過(guò)期的數(shù)據(jù)
緩存功能也有其自身的不足。例如,顯示的內(nèi)容可能不是最新、最準(zhǔn)確的,為此,必須設(shè)置合適的緩存策略。又如,緩存增加了系統(tǒng)的復(fù)雜性并使其難于測(cè)試和調(diào)試,因此建議在沒(méi)有緩存的情況下開(kāi)發(fā)和測(cè)試應(yīng)用程序,然后在性能優(yōu)化階段啟用緩存選項(xiàng)。
ASP.NET緩存的相關(guān)就介紹到這里,希望對(duì)你了解ASP.NET緩存有所幫助。
【編輯推薦】