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

ASP.NET 2.0 資料教程 60:應用程式啟動階段主動快取靜態資料 (Proactive Loading)-Application_Start、查找表、效能優化與 Reactive Loading 比較

     編輯:關於ASP.NET

前言

前兩章採 Reactive Loading (被動載入):請求時檢查快取,無則查資料庫。缺點:首次請求或快取過期時延遲高。Proactive Loading (主動載入) 在 Application_Start 預先載入靜態/高成本資料,消除首次請求延遲。

兩種 Proactive Loading 模式

  1. 變更偵測模式:定期檢查/訂閱資料異動 → 更新快取。實作複雜。
  2. 啟動載入模式 (本文重點):應用程式啟動時一次性載入靜態資料 (查找表、設定值、代碼表) 至快取,生命週期 = 應用程式存活期。

適用資料特徵

  • 極少異動 (如語言代碼表、國家清單、幣別、稅率)。
  • 查詢成本高 (大量連接、複雜運算)。
  • 全站共用、讀取頻率高。

實作範例:Language 查找表

void Application_Start(object sender, EventArgs e)
{
    // 1. 註冊路由等既有邏輯
    RegisterRoutes(RouteTable.Routes);

    // 2. 主動載入靜態資料
    LoadStaticLookupData();
}

private void LoadStaticLookupData()
{
    // 載入語言代碼表
    var languages = LanguagesBLL.GetLanguages(); // 從資料庫查詢
    HttpRuntime.Cache.Insert("Languages", languages, null, 
        Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, 
        CacheItemPriority.NotRemovable, null);

    // 可繼續載入其他查找表:Countries, Currencies, TaxRates...
}

頁面使用

<asp:DropDownList ID="ddlLanguage" runat="server" 
    DataSource="<%# GetLanguages() %>" DataTextField="Name" DataValueField="Code" />
public List<Language> GetLanguages()
{
    return HttpRuntime.Cache["Languages"] as List<Language>;
}

Reactive vs Proactive 比較

維度Reactive LoadingProactive Loading (啟動載入)
首次請求延遲高 (查資料庫)零 (已在記憶體)
資料新鮮度依過期時間/相依性需手動重載或回收應用程式
實作複雜度低 (設定屬性)中 (Application_Start 邏輯)
適用資料半動態、中等查詢成本靜態、高查詢成本、全站共用

結語

針對靜態查找表採用啟動主動載入,能消除首次請求延遲、降低資料庫負載。搭配 CacheItemPriority.NotRemovable 防止記憶體壓力下被移除。動態資料仍建議用 Reactive Loading + SQL Cache Dependency。

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