ASP.NET的頁輸出緩存
整理了一下MSDN中關(guān)于ASP.NET緩存機(jī)制的論述。
通常,應(yīng)用程序可以將那些頻繁訪問的數(shù)據(jù),以及那些需要大量處理時間來創(chuàng)建的數(shù)據(jù)存儲在內(nèi)存中,從而提高性能。例如,如果應(yīng)用程序使用復(fù)雜的邏輯來處理大量數(shù)據(jù),然后再將數(shù)據(jù)作為用戶頻繁訪問的報表返回,避免在用戶每次請求數(shù)據(jù)時重新創(chuàng)建報表可以提高效率。同樣,如果應(yīng)用程序包含一個處理復(fù)雜數(shù)據(jù)但不需要經(jīng)常更新的頁,則在每次請求時服務(wù)器都重新創(chuàng)建該頁會使工作效率低下。
在這些情況下,為了幫助您提高應(yīng)用程序的性能,ASP.NET 使用兩種基本的緩存機(jī)制來提供緩存功能。第一種機(jī)制是應(yīng)用程序緩存,它允許您緩存所生成的數(shù)據(jù),如 DataSet 或自定義報表業(yè)務(wù)對象。第二種機(jī)制是頁輸出緩存,它保存頁處理輸出,并在用戶再次請求該頁時,重用所保存的輸出,而不是再次處理該頁。
應(yīng)用程序緩存
應(yīng)用程序緩存提供了一種編程方式,可通過鍵/值對將任意數(shù)據(jù)存儲在內(nèi)存中。使用應(yīng)用程序緩存與使用應(yīng)用程序狀態(tài)類似。但是,與應(yīng)用程序狀態(tài)不同的是,應(yīng)用程序緩存中的數(shù)據(jù)是易失的,即數(shù)據(jù)并不是在整個應(yīng)用程序生命周期中都存儲在內(nèi)存中。使用應(yīng)用程序緩存的優(yōu)點(diǎn)是由 ASP.NET 管理緩存,它會在項(xiàng)過期、無效、或內(nèi)存不足時移除緩存中的項(xiàng)。還可以配置應(yīng)用程序緩存,以便在移除項(xiàng)時通知應(yīng)用程序。有關(guān)更多信息,請參見緩存應(yīng)用程序數(shù)據(jù)。
使用應(yīng)用程序緩存的模式是,確定在訪問某一項(xiàng)時該項(xiàng)是否存在于緩存中,如果存在,則使用。如果該項(xiàng)不存在,則可以重新創(chuàng)建該項(xiàng),然后將其放回緩存中。這一模式可確保緩存中始終有最新的數(shù)據(jù)。
有關(guān)更多信息,請參見如何:檢索緩存項(xiàng)的值。
頁輸出緩存在內(nèi)存中存儲處理后的 ASP.NET 頁的內(nèi)容。這一機(jī)制允許 ASP.NET 向客戶端發(fā)送頁響應(yīng),而不必再次經(jīng)過頁處理生命周期。頁輸出緩存對于那些不經(jīng)常更改,但需要大量處理才能創(chuàng)建的頁特別有用。例如,如果創(chuàng)建大通信量的網(wǎng)頁來顯示不需要頻繁更新的數(shù)據(jù),頁輸出緩存則可以極大地提高該頁的性能。可以分別為每個頁配置頁緩存,也可以在 Web.config 文件中創(chuàng)建緩存配置文件。利用緩存配置文件,只定義一次緩存設(shè)置就可以在多個頁中使用這些設(shè)置。
頁輸出緩存提供了兩種頁緩存模型:整頁緩存和部分頁緩存。整頁緩存允許將頁的全部內(nèi)容保存在內(nèi)存中,并用于完成客戶端請求。部分頁緩存允許緩存頁的部分內(nèi)容,其他部分則為動態(tài)內(nèi)容。有關(guān)更多信息,請參見ASP.NET 頁。
部分頁緩存可采用兩種工作方式:控件緩存和緩存后替換??丶彺嬗袝r也稱為分段緩存,這種方式允許將信息包含在一個用戶控件內(nèi),然后將該用戶控件標(biāo)記為可緩存的,以此來緩存頁輸出的部分內(nèi)容。這一方式可緩存頁中的特定內(nèi)容,并不緩存整個頁,因此每次都需重新創(chuàng)建整個頁。例如,如果要創(chuàng)建一個顯示大量動態(tài)內(nèi)容(如股票信息)的頁,其中有些部分為靜態(tài)內(nèi)容(如每周總結(jié)),這時可以將靜態(tài)部分放在用戶控件中,并允許緩存這些內(nèi)容。
緩存后替換與控件緩存正好相反。這種方式緩存整個頁,但頁中的各段都是動態(tài)的。例如,如果要創(chuàng)建一個在規(guī)定時間段內(nèi)為靜態(tài)的頁,則可以將整個頁設(shè)置為進(jìn)行緩存。如果向頁添加一個顯示用戶名的 Label 控件,則對于每次頁刷新和每個用戶而言,Label 的內(nèi)容都將保持不變,始終顯示緩存該頁之前請求該頁的用戶的姓名。但是,使用緩存后替換機(jī)制,可以將頁配置為進(jìn)行緩存,但將頁的個別部分標(biāo)記為不可緩存。在此情況下,可以向不可緩存部分添加 Label 控件,這樣將為每個用戶和每次頁請求動態(tài)創(chuàng)建這些控件。有關(guān)更多信息,請參見緩存 ASP.NET 頁的某些部分。
【編輯推薦】