首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 2.0 快取技術深度解析:從頁面輸出到 SQL 相依性的完整指南

     編輯:ASP.NET 基礎

前言

ASP.NET 2.0 引入了多項效能優化特性,其中快取技術無疑是最關鍵的一環。透過將常用資料暫存於記憶體(或硬碟),系統能大幅降低資料庫存取頻率,進而提升應用程式的回應速度與延展性。本文將系統性地介紹 ASP.NET 2.0 的三大快取層面:頁面輸出快取、資料來源快取,以及結合 SQL Server 2005 的 SQL 快取相依性。

一、頁面輸出快取

頁面輸出快取可將整個頁面或部分片段的輸出 HTML 直接存入快取,後續請求無需重新執行頁面生命週期即可回應。

1. 宣告式快取指令

在 .aspx 頁面頂端加入 <%@ OutputCache Duration="60" VaryByParam="none" %> 即可啟用。屬性說明如下:

  • Duration:快存秒數(例:60 秒)。
  • VaryByParam:依查詢字串參數建立不同快取版本;若不需區分,必須設為 none。

2. 回呼替換——動態片段植入

若頁面大部分靜態,僅少數區塊(如即時時間、使用者名稱)需動態更新,可使用 <asp:Substitution> 控制項搭配靜態方法:

<script runat="server">
    public static string GetCurrentDate(HttpContext context)
    {
        return DateTime.Now.ToString();
    }
</script>
<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentDate" />

此機制會在輸出快取的 HTML 中保留佔位符,於每次回應時呼叫指定方法填入最新內容。

二、資料來源控制項快取

SqlDataSource、ObjectDataSource 等資料來源控制項內建快取屬性,無需撰寫程式碼即可快取查詢結果。

屬性說明
EnableCaching啟用快取(預設 false)
CacheDuration快存秒數,預設 Infinite(永久)
CacheExpirationPolicyAbsolute(到期失效)或 Sliding(滑動過期,每次存取重設計時器)
SqlCacheDependency指定資料表相依性,如 pubs:authors
CacheKeyDependency自訂快取金鑰相依性(支援 SQL Server 2005)

硬碟快取設定

當快取資料量龐大導致記憶體壓力時,可啟用硬碟快取:

  1. 頁面指令加入 DiskCacheable="true"。
  2. Web.config 中設定 <diskCache enabled="true" maxSizePerApp="2" />(單位 MB)。

注意:硬碟 I/O 較慢,適用於快存時間較長(如 1 小時以上)的情境。

三、SQL 快取相依性——解決資料不一致的關鍵

傳統快取最大痛點在於「資料異動後快取未同步更新」。ASP.NET 2.0 配合 SQL Server 2005/2008 引入 SqlCacheDependency,利用 Service Broker 與查詢通知機制,資料表一旦異動即自動使快取失效。

設定步驟(SQL Server 2005+)

  1. 啟用資料庫與資料表的查詢通知:
    aspnet_regsql.exe -S ".\DBNAME" -E -d "pubs" -ed
    aspnet_regsql.exe -S ".\DBNAME" -E -d "pubs" -et -t "authors"
    
  2. Web.config 註冊連線字串與輪詢時間(若使用舊版輪詢模式):
    <sqlCacheDependency enabled="true" pollTime="1000">
      <databases>
        <add name="PubsDB" connectionStringName="pubsConnectionString" />
      </databases>
    </sqlCacheDependency>
    
  3. 頁面或資料來源指定相依性:SqlDependency="pubs.authors" 或 <%@ OutputCache SqlDependency="pubs.authors" %>。

舊版 SQL Server (7.0/2000) 支援

需執行 aspnet_regsql.exe 建立輪詢資料表與觸發器,設定較繁瑣但原理相同。Oracle 等非 SQL Server 資料庫則不支援此功能。

四、快取設定檔——集中管理快取策略

在 Web.config 定義快取設定檔,供多頁面重複使用:

<outputCacheSettings>
  <outputCacheProfiles>
    <add name="CacheFor60Seconds" duration="60" varyByParam="none" />
  </outputCacheProfiles>
</outputCacheSettings>

頁面引用:<%@ OutputCache CacheProfile="CacheFor60Seconds" %>。

總結與最佳實務建議

  • 優先快取「讀多寫少、資料量大」的資料,如商品目錄、設定檔、報表結果。
  • 善用 SQL 快取相依性 自動處理失效,避免手動移除快取的疏漏。
  • 監控快取命中率(Performance Counter:ASP.NET Applications\Cache Total Hit Ratio),依實際流量調整 Duration。
  • 避免過度快取:Session、ViewState、使用者個人化資料不宜放入輸出快取。

掌握上述機制,即能在 ASP.NET 2.0 應用中建立高效能、可維護的快取架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved