通常,應用程式可以將那些頻繁訪問的資料,以及那些需要大量處理時間來建立的資料存放區在記憶體中,從而提高效能。例如,如果應用程式使用複雜的邏輯來處理大量資料,然後再將資料作為使用者頻繁訪問的報表返回,避免在使用者每次請求資料時重新建立報表可以提高效率。同樣,如果應用程式套件組合含一個處理複雜資料但不需要經常更新的頁,則在每次請求時伺服器都重新建立該頁會使工作效率低下。
在這些情況下,為了協助您提高應用程式的效能,ASP.NET 使用兩種基本的緩衝機制來提供緩衝功能。第一種機制是應用程式緩衝,它允許您緩衝所產生的資料,如 DataSet 或自訂報表業務對象。第二種機制是頁輸出緩衝,它儲存頁處理輸出,並在使用者再次請求該頁時,重用所儲存的輸出,而不是再次處理該頁。
應用程式緩衝
應用程式緩衝提供了一種編程方式,可通過鍵/值對將任意資料存放區在記憶體中。使用應用程式緩衝與使用應用程式狀態類似。但是,與應用程式狀態不同的是,應用程式緩衝中的資料是易失的,即資料並不是在整個應用程式生命週期中都儲存在記憶體中。使用應用程式緩衝的優點是由 ASP.NET 管理緩衝,它會在項到期、無效、或記憶體不足時移除緩衝中的項。還可以配置應用程式緩衝,以便在移除項時通知應用程式。有關更多資訊,請參見緩衝應用程式資料。
使用應用程式緩衝的模式是,確定在訪問某一項時該項是否存在於緩衝中,如果存在,則使用。如果該項不存在,則可以重新建立該項,然後將其放回緩衝中。這一模式可確保緩衝中始終有最新的資料。
有關更多資訊,請參見如何:檢索快取項目的值。
頁輸出緩衝
頁輸出緩衝在記憶體中儲存處理後的 ASP.NET 頁的內容。這一機制允許 ASP.NET 向用戶端發送頁響應,而不必再次經過頁處理生命週期。頁輸出緩衝對於那些不經常更改,但需要大量處理才能建立的頁特別有用。例如,如果建立大通訊量的網頁來顯示不需要頻繁更新的資料,頁輸出緩衝則可以極大地提高該頁的效能。可以分別為每個頁配置頁緩衝,也可以在 Web.config 檔案中建立緩衝設定檔。利用緩衝設定檔,只定義一次緩衝設定就可以在多個頁中使用這些設定。
頁輸出緩衝提供了兩種頁緩衝模型:整頁緩衝和部分頁緩衝。整頁緩衝允許將頁的全部內容儲存在記憶體中,並用於完成用戶端請求。部分頁緩衝允許快取頁面的部分內容,其他部分則為動態內容。有關更多資訊,請參見緩衝 ASP.NET 頁。
部分頁緩衝可採用兩種工作方式:控制項緩衝和緩衝後替換。控制項緩衝有時也稱為分段緩衝,這種方式允許將資訊包含在一個使用者控制項內,然後將該使用者控制項標記為可快取的,以此來快取頁面輸出的部分內容。這一方式可快取頁面中的特定內容,並不緩衝整個頁,因此每次都需重新建立整個頁。例如,如果要建立一個顯示大量動態內容(如股票資訊)的頁,其中有些部分為靜態內容(如每周總結),這時可以將靜態部分放在使用者控制項中,並允許緩衝這些內容。
緩衝後替換與控制項緩衝正好相反。這種方式緩衝整個頁,但頁中的各段都是動態。例如,如果要建立一個在規定時間段內為靜態頁,則可以將整個頁設定為進行緩衝。如果向頁添加一個顯示使用者名稱的 Label 控制項,則對於每次頁重新整理和每個使用者而言,Label 的內容都將保持不變,始終顯示緩衝該頁之前請求該頁的使用者的姓名。但是,使用緩衝後替換機制,可以將頁配置為進行緩衝,但將頁的個別部分標記為不可緩衝。在此情況下,可以向不可緩衝部分添加 Label 控制項,這樣將為每個使用者和每次頁請求動態建立這些控制項。有關更多資訊,請參見緩衝 ASP.NET 頁的某些部分。
根據請求參數快取頁面
除快取頁面的單一版本外,ASP.NET 頁輸出緩衝還提供了一些功能,可以建立根據請求參數的不同而不同的頁的多個版本。有關更多資訊,請參見快取頁面的多個版本。
自動移除資料
出於以下原因之一,ASP.NET 可以從緩衝中移除資料:
為了協助管理快取項目,在將項從緩衝中移除時,ASP.NET 會通知應用程式。
清理
清理是在記憶體不足時從緩衝中刪除項的過程。如果某些項在一段時間內未被訪問,或是在添加到緩衝中時被標記為低優先順序,則這些項會被移除。ASP.NET 使用 CacheItemPriority 對象來確定要首先清理的項。有關更多資訊,請參見如何:將項添加到緩衝中。
到期
除了清理外,在快取項目到期時,ASP.NET 會自動從緩衝中移除這些項。向緩衝添加項時,可以按下表中的描述設定其到期時間。
| 到期類型 |
說明 |
可調到期 |
指定某項自上次被訪問後多長時間到期。例如,可以將某項設定為自上次在緩衝中被訪問後 20 分鐘到期。 |
絕對到期 |
指定某項在設定的時間到期,而不考慮訪問頻率。例如,可以將某項設定為在 6:00 PM 到期,或四小時後到期。 |
依賴項
可以將緩衝中某一項的生存期配置為依賴於其他應用程式元素,如某個檔案或資料庫。當快取項目依賴的元素更改時,ASP.NET 將從緩衝中移除該項。例如,如果您的網站顯示一份報告,該報告是應用程式通過 XML 檔案建立的,您可以將該報告放置在緩衝中,並將其配置為依賴於該 XML 檔案。當 XML 檔案更改時,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 服務得到一個特定值時,該依賴項就會從緩衝中移除資料。 |
應用程式快取項目移除通知
當項從應用程式緩衝中移除時,您可以收到通知。例如,如果有一個需要大量處理時間才能建立的項,當從緩衝中移除該項時,您會收到通知以便可以立即替換該項。這樣,下次請求該項時,使用者便不必等待處理該項。有關更多資訊,請參見如何:從緩衝中移除項時通知應用程式。