Share via


ASP.NET 快取概觀

更新:2007 年 11 月

通常應用程式可以將時常存取,並且需要大量處理時間才能建立的資料儲存在記憶體中以增加效能。例如,如果應用程式使用複雜的邏輯處理大量資料,然後以報表的形式傳回使用者經常存取的資料,那麼避免在使用者每次提出要求時重新建立報表,會是較有效率的作法。同樣地,如果應用程式包含處理複雜資料但是不常更新的網頁,讓伺服器在每次要求時重新建立網頁會降低執行效能。

若要在這些情況下增加應用程式的效能,ASP.NET 會使用兩種基本快取機制提供快取功能。第一種是應用程式快取,可以讓您快取所產生的資料,例如 DataSet 或自訂報表商務物件。第二種是網頁輸出快取,能夠儲存網頁處理的輸出然後重新使用,而不是在使用者再次要求網頁時重新處理網頁。

應用程式快取

應用程式快取提供程式設計的方式,讓您使用索引鍵/值組將任意資料儲存在記憶體中。使用應用程式快取類似使用應用程式狀態。然而,與應用程式狀態不同的是,應用程式快取中的資料屬於變動性質,表示在應用程式存留期間不會將資料儲存在記憶體中。使用應用程式快取的優點是,ASP.NET 會管理快取並且在項目過期或失效,或是記憶體不足的情況下移除項目。您也可以設定應用程式快取,在移除項目時告知應用程式。如需詳細資訊,請參閱快取應用程式資料

使用應用程式快取的模式是,每次存取項目時判斷該項目是否已存在於快取中,如果是,就會使用該項目。如果項目不存在,您可以重新建立項目然後將其放回快取中。這個模式可以確保快取中永遠都是最新的資料。

如需詳細資訊,請參閱 HOW TO:擷取快取項目的值

網頁輸出快取

網頁輸出快取會將處理過的 ASP.NET 網頁內容儲存在記憶體中。這可以讓 ASP.NET 在不需要重新逐步執行網頁處理生命週期的情況下,將網頁回應傳送至用戶端。網頁輸出快取對不需時常變更,但是需要大量處理時間才能建立的網頁特別有用。例如,如果您建立高流量的 Web 網頁以顯示不常更新的資料,網頁輸出快取能夠大幅增加這個網頁的效能。您可以為每個網頁個別設定網頁快取,或是可以在 Web.config 檔中建立快取設定檔,讓您只需要定義一次快取設定,就能夠在多個網頁中使用這些設定。

網頁輸出快取提供兩種網頁快取模型:完整網頁快取和部分網頁快取 (Partial Page Caching)。完整網頁快取可以將某個網頁的全部內容一直保存在記憶體中,以便用來滿足用戶端要求。部分網頁快取可以讓您快取網頁的一部分,其他部分則是動態的。如需詳細資訊,請參閱快取 ASP.NET Web 網頁

部分網頁快取的運作方式有兩種:控制項快取和快取後置替換 (Post-Cache Substitution)。控制項快取 (有時候也稱為片段快取) 可以藉由將資訊包含在使用者控制項中,然後將使用者控制項設定為能夠快取,以便讓您快取部分網頁輸出。如此一來,可以快取某個網頁中的特定內容,但是因為不會快取整個網頁,所以每次仍然必須重新建立尚未快取的網站內容。例如,如果要建立顯示大量動態內容 (例如股票資訊) 的網頁,但是要同時保留靜態區段 (例如每週的摘要),您可以將這些靜態區段放在使用者控制項中並允許快取。

快取後置替換則剛好相反。其會快取整個網頁,但是網頁中的片段是動態的。例如,如果建立在一段時間內保持靜態的網頁,就可以設定快取整個網頁。如果您將 Label 控制項加入顯示使用者名稱的網頁,每次網頁重新整理和每個使用者都會看到相同的 Label,顯示在快取之前要求網頁的使用者名稱。然而,在使用快取後置替換時,您可以設定快取網頁但是不快取網頁的個別區段。在上述情形中,您可以將 Label 控制項加入無法快取的區段,然後就會為每個使用者和網頁要求動態建立控制項。如需詳細資訊,請參閱ASP.NET Web 網頁的快取部分

根據要求參數快取網頁

除了快取網頁的單一版本外,ASP.NET 網頁輸出快取也提供根據不同要求參數,建立多個網頁版本的功能。如需詳細資訊,請參閱快取網頁的多個版本

自動移除資料

ASP.NET 能夠基於下列原因之一從快取移除資料:

  • 因為伺服器上的記憶體不足 (稱為清除的處理序)。

  • 快取中的項目已過期。

  • 項目的相依性變更。

ASP.NET 為了能夠協助您管理快取的項目,當項目自快取中移除時,ASP.NET 會告知應用程式。

清除

Scavenging 是當記憶體不夠時,從快取清除項目的處理序。當過一段時間沒有存取項目,或是項目在加入快取時標記為低優先權時,就會移除項目。ASP.NET 會使用 CacheItemPriority 物件判斷要先清除那個項目。如需詳細資訊,請參閱 HOW TO:將項目加入至快取

到期

除了清除以外,ASP.NET 也會自動從快取移除過期的項目。當您將項目加入快取時,可以項目設為過期,如下表的說明。

到期類型

說明

滑動期限

指定項目在最後一次存取多久之後過期。例如,您可以設定項目在快取中最後一次存取之後 20 分鐘過期。

絕對期限

指定項目在設定時間過期,不論存取項目的頻率。例如,您可以設定項目在下午 6 時或四小時後過期。

相依性

您可以將項目在快取中的存留期,設定為相依於其他應用程式項目,例如檔案或資料庫。當快取項目相依的項目變更時,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 服務而產生特定值時從快取中移除資料。

應用程式快取項目移除告知

當從應用程式快取移除項目時可以告知您。例如,如果建立項目需要大量處理時間,當從快取移除項目時可以告知您,以便讓您立即重新放置它。因此,當下一次要求項目時,使用者就不需要等待處理項目。如需詳細資訊,請參閱 HOW TO:當項目從快取移除時告知應用程式

請參閱

工作

HOW TO:使用檔案相依性快取頁面輸出

概念

快取 ASP.NET Web 網頁

快取應用程式資料

以 SqlCacheDependency 類別在 ASP.NET 中快取