ASP.NET快取概念及其應用淺析

iDotNetSpace發表於2010-01-08

ASP.NET快取概念是什麼呢?通常,應用程式可以將那些頻繁訪問的資料,以及那些需要大量處理時間來建立的資料儲存在記憶體中,從而提高效能。例如,如果應用程式使用複雜的邏輯來處理大量資料,然後再將資料作為使用者頻繁訪問的報表返回,避免在使用者每次請求資料時重新建立

ASP.NET快取概念是什麼呢?通常,應用程式可以將那些頻繁訪問的資料,以及那些需要大量處理時間來建立的資料儲存在記憶體中,從而提高效能。例 如,如果應用程式使用複雜的邏輯來處理大量資料,然後再將資料作為使用者頻繁訪問的報表返回,避免在使用者每次請求資料時重新建立報表可以提高效率。同樣,如 果應用程式包含一個處理複雜資料但不需要經常更新的頁,則在每次請求時伺服器都重新建立該頁會使工作效率低下。

在這些情況下,瞭解了ASP.NET快取概念之後,為了幫助您提高應用程式的效能,ASP.NET快取使用兩種基本的快取機制來提供快取功能。第一 種機制是應用程式快取,它允許您快取所生成的資料,如DataSet或自定義報表業務物件。第二種機制是頁輸出快取,它儲存頁處理輸出,並在使用者再次請求 該頁時,重用所儲存的輸出,而不是再次處理該頁。

ASP.NET快取應用程式

應用程式快取提供了一種程式設計方式,可通過鍵/值對將任意資料儲存在記憶體中。使用應用程式快取與使用應用程式狀態類似。但是,與應用程式狀態不同的 是,應用程式快取中的資料是易失的,即資料並不是在整個應用程式生命週期中都儲存在記憶體中。使用應用程式快取的優點是由ASP.NET管理快取,它會在項 過期、無效、或記憶體不足時移除快取中的項。還可以配置應用程式快取,以便在移除項時通知應用程式。有關更多資訊,請參見快取應用程式資料。

使用應用程式快取的模式是,確定在訪問某一項時該項是否存在於快取中,如果存在,則使用。如果該項不存在,則可以重新建立該項,然後將其放回快取中。這一模式可確保快取中始終有最新的資料。

ASP.NET快取應用之頁輸出

頁輸出快取在記憶體中儲存處理後的ASP.NET頁的內容。這一機制允許ASP.NET向客戶端傳送頁響應,而不必再次經過頁處理生命週期。頁輸出緩 存對於那些不經常更改,但需要大量處理才能建立的頁特別有用。例如,如果建立大通訊量的網頁來顯示不需要頻繁更新的資料,頁輸出快取則可以極大地提高該頁 的效能。可以分別為每個頁配置頁快取,也可以在Web.config檔案中建立快取配置檔案。利用快取配置檔案,只定義一次快取設定就可以在多個頁中使用 這些設定。

頁輸出快取提供了兩種頁快取模型:整頁快取和部分頁快取。整頁快取允許將頁的全部內容儲存在記憶體中,並用於完成客戶端請求。部分頁快取允許快取頁的部分內容,其他部分則為動態內容。

部分頁快取可採用兩種工作方式:控制元件快取和快取後替換。控制元件快取有時也稱為分段快取,這種方式允許將資訊包含在一個使用者控制元件內,然後將該使用者控制元件標 記為可快取的,以此來快取頁輸出的部分內容。這一方式可快取頁中的特定內容,並不快取整個頁,因此每次都需重新建立整個頁。例如,如果要建立一個顯示大量 動態內容(如股票資訊)的頁,其中有些部分為靜態內容(如每週總結),這時可以將靜態部分放在使用者控制元件中,並允許快取這些內容。

快取後替換與控制元件快取正好相反。這種方式快取整個頁,但頁中的各段都是動態的。例如,如果要建立一個在規定時間段內為靜態的頁,則可以將整個頁設定 為進行快取。如果向頁新增一個顯示使用者名稱的Label控制元件,則對於每次頁重新整理和每個使用者而言,Label的內容都將保持不變,始終顯示快取該頁之前請求該 頁的使用者的姓名。但是,使用快取後替換機制,可以將頁配置為進行快取,但將頁的個別部分標記為不可快取。在此情況下,可以向不可快取部分新增Label控 件,這樣將為每個使用者和每次頁請求動態建立這些控制元件。

根據請求引數快取頁

除快取頁的單一版本外,ASP.NET頁輸出快取還提供了一些功能,可以建立根據請求引數的不同而不同的頁的多個版本。

自動移除資料

出於以下原因之一,ASP.NET可以從快取中移除資料:

由於伺服器上的記憶體不足,開始一個稱為“清理”的過程。

由於快取中的項已過期。

由於項的依賴項發生了更改。

為了幫助管理快取項,在將項從快取中移除時,ASP.NET會通知應用程式。

清理

清理是在記憶體不足時從快取中刪除項的過程。如果某些項在一段時間內未被訪問,或是在新增到快取中時被標記為低優先順序,則這些項會被移除。ASP.NET使用CacheItemPriority物件來確定要首先清理的項。

過期

除了清理外,在快取項過期時,ASP.NET會自動從快取中移除這些項。向快取新增項時,可以按下表中的描述設定其過期時間。

ASP.NET快取過期型別可調過期

指定某項自上次被訪問後多長時間過期。例如,可以將某項設定為自上次在快取中被訪問後20分鐘過期。

絕對過期

指定某項在設定的時間過期,而不考慮訪問頻率。例如,可以將某項設定為在6:00PM過期,或四小時後過期。

依賴項

可以將快取中某一項的生存期配置為依賴於其他應用程式元素,如某個檔案或資料庫。當快取項依賴的元素更改時,ASP.NET將從快取中移除該項。例 如,如果您的網站顯示一份報告,該報告是應用程式通過XML檔案建立的,您可以將該報告放置在快取中,並將其配置為依賴於該XML檔案。當XML檔案更改 時,ASP.NET會從快取中移除該報告。當程式碼請求該報告時,程式碼會先確定該報告是否在快取中,如果不在,程式碼會重新建立該報告。因此,始終都有最新版 本的報告可用。

對於ASP.NET快取應用,它支援下列描述的依賴項:

鍵依賴項

應用程式快取中的項儲存在鍵/值對中。鍵依賴項允許項依賴於應用程式快取中另一項的鍵。

如果移除了原始項,則具有鍵依賴關係的項也會被移除。例如,可以新增一個名為ReportsValid的快取項,然後快取若干個依賴於ReportsValid鍵的報告。當ReportsValid項被移除時,所有依賴於它的快取報告同樣也會從快取中移除。

檔案依賴項

快取中的項依賴於外部檔案。如果該檔案被修改或刪除,則快取項也會被移除。

SQL依賴項

快取中的項依賴於MicrosoftSQLServer2005、SQLServer2000或SQLServer7.0資料庫中表的更改。對於SQLServer2005,快取中的項可依賴於表中的某一行。

聚合依賴項

通過使用AggregateCacheDependency類快取中的項依賴於多個元素。如果任何依賴項發生更改,該項都會從快取中移除。

自定義依賴項

可以用您自己的程式碼建立的依賴關係來配置快取中的項。例如,可以建立一個自定義Web服務快取依賴項,當呼叫Web服務得到一個特定值時,該依賴項就會從快取中移除資料。

ASP.NET快取應用程式項移除通知

當項從應用程式快取中移除時,您可以收到通知。例如,如果有一個需要大量處理時間才能建立的項,當從快取中移除該項時,您會收到通知以便可以立即替換該項。這樣,下次請求該項時,使用者便不必等待處理該項。

ASP.NET快取概念以及ASP.NET快取應用的相關資訊就向你介紹到這裡,希望通過以上的敘述使你對什麼是ASP.NET快取概念,以及ASP.NET快取應用有所瞭解。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-624691/,如需轉載,請註明出處,否則將追究法律責任。

相關文章