產生高效能、可縮放的 Web 應用程式最重要的因素之一是能夠在首次請求項時將這些項儲存在記憶體中,不管它們是資料對象、頁還是頁的某些部分。可以將這些項緩衝或儲存在 Web 服務器上或請求流中的其他軟體上,如Proxy 伺服器或瀏覽器。能夠避免重新建立滿足先前請求的資訊,尤其是那些需要大量處理器時間或資源的資訊。
ASP.NET 提供了兩種方式來建立高效能 Web 應用程式的緩衝類型。第一種類型是輸出緩衝,它允許將動態網頁和使用者控制項響應儲存在輸出資料流(從發起伺服器到請求瀏覽器)中任何具備 HTTP 1.1 緩衝功能的裝置上。當後面的請求發生時,不執行頁或使用者控制項代碼,緩衝的輸出用於滿足該請求。第二種類型的緩衝是應用程式資料緩衝,可以使用它以編程方式將任意對象(如應用程式資料)儲存到伺服器記憶體中,以節省重新建立這些對象所需的時間和資源。
ASP.NET 2.0支援以下幾種緩衝:
1.網頁輸出快取
將ASP.NET頁面儲存在伺服器的記憶體中,當使用者請求該頁面的時候,直接從記憶體中輸出相關資料,不必再次經過頁處理生命週期。
頁輸出緩衝提供了兩種頁緩衝模型:整頁緩衝和部分頁緩衝。整頁緩衝允許將頁的全部內容儲存在記憶體中,部分頁緩衝允許快取頁面的部分內容,其他部分則為動態內容。可以分別為每個頁配置頁緩衝,也可以在 Web.config 檔案中建立緩衝設定檔。利用緩衝設定檔,只定義一次緩衝設定就可以在多個頁中使用這些設定。
部分頁緩衝可採用兩種工作方式:控制項緩衝和緩衝後替換。控制項緩衝允許將資訊包含在一個使用者控制項內,然後將該使用者控制項標記為可快取的,以此來快取頁面輸出的部分內容。這一方式可快取頁面中的特定內容,並不緩衝整個頁,因此每次都需重新建立整個頁。例如,如果要建立一個顯示大量動態內容(如股票資訊)的頁,其中有些部分為靜態內容(如每周總結),這時可以將靜態部分放在使用者控制項中,並允許緩衝這些內容。緩衝後替換與控制項緩衝正好相反。這種方式緩衝整個頁,但將頁的個別部分標記為不可緩衝。
2.應用程式緩衝
應用程式緩衝提供了一種編程方式,可通過鍵/值對將任意資料存放區在記憶體中。使用應用程式緩衝與使用應用程式狀態類似。但是,與應用程式狀態不同的是,應用程式緩衝中的資料是易失的,即資料並不是在整個應用程式生命週期中都儲存在記憶體中。應用程式緩衝的優點是由 ASP.NET 管理緩衝,它會在項到期、無效、或記憶體不足時移除緩衝中的項。還可以配置應用程式緩衝,以便在移除項時通知應用程式。
自動移除資料
出於以下原因之一,ASP.NET 可以從緩衝中移除資料:
1.由於伺服器上的記憶體不足,開始一個稱為“清理”的過程。
2.由於緩衝中的項已到期。
3.由於項的依賴項發生了更改。
註解:
清理:清理是在記憶體不足時從緩衝中刪除項的過程。如果某些項在一段時間內未被訪問,或是在添加到緩衝中時被標記為低優先順序,則這些項會被移除。
到期:在快取項目到期時,ASP.NET 會自動從緩衝中移除這些項。向緩衝添加項時,可以按下表中的描述設定其到期時間。
到期類型 |
說明 |
可調到期 |
指定某項自上次被訪問後多長時間到期。例如,可以將某項設定為自上次在緩衝中被訪問後 20 分鐘到期。 |
絕對到期 |
指定某項在設定的時間到期,而不考慮訪問頻率。例如,可以將某項設定為在 6:00 PM 到期,或四小時後到期。 |
依賴項:可以將緩衝中某一項的生存期配置為依賴於其他應用程式元素,如某個檔案或資料庫。當快取項目依賴的元素更改時,ASP.NET 將從緩衝中移除該項。ASP.NET 緩衝支援下表中描述的依賴項。
| 依賴項 |
說明 |
鍵依賴項 |
應用程式緩衝中的項儲存在鍵/值對中。鍵依賴項允許項依賴於應用程式緩衝中另一項的鍵。如果移除了原始項,則具有鍵依賴關係的項也會被移除。例如,可以添加一個名為 ReportsValid 的快取項目,然後緩衝若干個依賴於 ReportsValid 鍵的報告。當 ReportsValid 項被移除時,所有依賴於它的緩衝報告同樣也會從緩衝中移除。 |
檔案依賴項 |
緩衝中的項依賴於外部檔案。如果該檔案被修改或刪除,則快取項目也會被移除。 |
SQL 依賴項 |
緩衝中的項依賴於 Microsoft SQL Server 2005、SQL Server 2000 或 SQL Server 7.0 資料庫中表的更改。對於 SQL Server 2005,緩衝中的項可依賴於表中的某一行。有關更多資訊,請參見使用 SqlCacheDependency 類在 ASP.NET 中緩衝。 |
彙總依賴項 |
通過使用 AggregateCacheDependency 類緩衝中的項依賴於多個元素。如果任何依賴項發生更改,該項都會從緩衝中移除。 |
自訂依賴項 |
可以用您自己的代碼建立的依賴關係來配置緩衝中的項。例如,可以建立一個自訂 Web 服務緩衝依賴項,當調用 Web 服務得到一個特定值時,該依賴項就會從緩衝中移除資料。 |