熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

為 ASP.NET 創建緩存配置對象

2013-11-13 09:40:57  來源: .NET編程 

  簡介
  
  如果您還沒有閱讀過 ASPNET Caching:Techniques and Best Practices請閱讀本文主要以該文章的內容為基礎尤其是最佳實踐本文將描述 CacheConfig 類的內部組成該幫助器類為 Microsoft ASPNET 中的 Cache 對象提供包裝該類公開了一個非常簡單的方法用於完成 ASPNET 應用程序內的大部分公共緩存工作使用 CacheConfig類可以通過翻轉配置設置啟用或禁用緩存通過配置設置管理所有緩存項和其緩存持續時間也可以只用一行代碼使用前面文章中描述的最佳實踐技術來訪問緩存
  
  配置
  
  CacheConfig 從 nfig 文件讀取其所有配置設置指定的節和該節內的每個鍵值都使用缺省值定義為靜態字符串如代碼示例 所示
  
  代碼示例 配置節和鍵名
  
  protected static string cacheSettingsConfigName = CacheSettings;
  protected static string EnableCachingKey = EnableCaching;
  protected static string RequireKeyDefinitionInConfigKey =
  RequireKeyDefinitionInConfig;
  protected static string DefaultCacheDurationUnitsKey =
  DefaultCacheDurationUnits;
  protected static string DefaultCacheDurationValueKey =
  DefaultCacheDurationValue;
  
  默認情況下所有 CacheConfig 配置設置都存儲在名為 CacheSettings 的自定義配置節中該節被定義為簡單的 NameValueCollection就像內置的 AppSettings 配置節一樣必須把該新配置節定義在 nfig 中如代碼示例 所示
  
  代碼示例 在 nfig 中定義 CacheSettings 配置節
  
  <configSections>
  <section name=CacheSettings
  type=SystemConfigurationNameValueFileSectionHandler System
  Version= Culture=neutral PublicKeyToken=bace
  />
  </configSections>
  
  <configSections> 元素必須是 nfig 配置元素中的第一個元素
  
  一旦該節在 nfig 中定義並添加適當的鍵它將在應用程序中管理 CacheConfig 類的行為代碼示例 顯示了示例 CacheSettings 節
  
  代碼示例 CacheSettings 鍵和值
  
  <CacheSettings>
  <! true/false >
  <add key=EnableCaching value=true />
  <! true/false >
  <add key=RequireKeyDefinitionInConfig value=true />
  <! seconds minutes or hours >
  <add key=DefaultCacheDurationUnits value=seconds />
  <! integer >
  <add key=DefaultCacheDurationValue value= />
  <! Cache Keys and Durations
  use default for value to use default otherwise integer >
  <add key=AuthorsDataTable value=default />
  <add key=AuthorsDataTableByState value= />
  </CacheSettings>
  
  前四個鍵對 CacheConfig 的行為影響最大最後幾個鍵定義了所有對象的緩存鍵名和緩存持續時間這些對象存儲在使用 CacheConfig 的緩存中 描述了前幾個配置值的效果
  
  表 配置設置和它們的效果
  
  設置 描述
  EnableCaching
  True/False當它為 false 時 CacheConfig 被有效禁用不會向緩存寫項或從緩存讀項
  
  RequireKeyDefinitionInConfig
  True/False當它為 true 時如果為 CacheConfig 提供了一個鍵但在 nfig 中沒有該鍵將引發異常
  
  DefaultCacheDurationUnits
  secondsminuteshours為下一節指定的持續時間值定義單位用作添加到緩存但沒有指定時間段的項的默認緩存持續時間
  
  DefaultCacheDurationValue
  (整數)指定一個項應該在緩存中存儲的時間長度使用 DefaultCacheDurationUnits 中定義的單位用作添加到緩存但沒有指定時間段的項的默認緩存持續時間
  
  由於這只是 CacheConfig 類的 所以非常簡單未來的增強功能可能添加對其他類型關鍵依賴項的支持例如文件就像存儲當前設置一樣在配置中存儲文件路徑大部分緩存都緩存來自 Microsoft SQL Server? 的數據所以基於時間的緩存就足夠了(至少到 ASPNET 的緩存 API 可使用 SQL 表緩存無效的內置支持時為止)
  
  首次使用
  
  CacheConfig 是個完全靜態(在 Microsoft Visual Basic 中是共享的)的類這意味著它永遠不能直接實例化但是它的方法可以直接使用然而它確實有一個構造函數每當第一次調用它的某種方法時調用該構造函數該靜態構造函數執行如下任務
  
  將 CacheSettings 配置節加載到本地 NameValueCollection
  
  根據配置設置對本地 EnableCaching 變量進行設置
  
  根據配置設置對本地 RequireKeyDefinition 變量進行設置
  
  根據配置設置對本地 DefaultCacheDuration TimeSpan 進行設置
  
  檢查 HttpContext(緩存所需)是否可用如果不可用就把 EnableCaching 設置為 false(在設計時或者從 windows 窗體應用程序調用數據訪問層時避免錯誤)
  
  當第一次引用 CacheConfig 時靜態構造函數只調用一次但是因為所有設置都存儲在 nfig 中所以任何更新都將導致應用程序完全重啟這當然意味著下次調用 CacheConfig 將再次運行靜態構造函數並檢索最新的值
  
  基本方法DeCache
  
  我調用的唯一方法是 DeCacheDeCache為給定的鍵從緩存請求出一個值如果緩存中不存在該值DeCache將使用作為回調函數提供的方法重新填充緩存並返回該方法的結果CacheConfig 還可以用於使用 EnCache()方法簡單地向緩存添加一個項但幾乎很少使用這個功能
  
  對於每個要緩存的數據類型都必須有一個單獨的 DeCache 方法本文提供的 CacheConfig 版僅支持 DataTable 對象這可以很容易地進行擴展以包含其他的對象包括 SystemObject(如果期望最終的靈活性超越強類型檢查)但這樣做需要許多重復代碼一旦 C# 支持通用性就可以避免許多這種重復代碼希望能產生該工具的新版本
  
  DeCacheDataTable() 方法支持幾個重載
  
  (string key GetDataTableCallback callback)
  — 當緩存需要為空時至少需要一個鍵和一個委托來填充緩存
  
  (string key GetDataTableCallback callback object[] callbackArguments)
  —包含回調方法的參數數組
  
  (string key GetDataTableCallback callback object[] callbackArguments TimeSpan cacheDuration)
  —包含一個持續時間它將重寫在 nfig 中為該鍵指定的任何信息
  
  (string key GetDataTableCallback callback object[] callbackArguments TimeSpan cacheDuration bool IgnoreCache)
  IgnoreCache
  —如果不存在將被視為 false把它設置為 true 將強制跳過緩存並從原始來源請求值
  
  GetDataTableCallback 委托定義為
  
  public delegate DataTable GetDataTableCallback(object[] args);
  
  因為大部分情況下用於從數據源請求數據的現有方法不使用 (object[] args) 的簽名所以通常的做法是使用該簽名創建一個新的私有或保護方法並從現有方法調用它這種用法的示例如下所示
  
  用法為數據訪問層添加緩存支持
  
  可下載的示例應用程序包含一個非常簡單的 web 應用程序該應用程序有一個用於列舉 Pubs 數據庫中作者的 Web 窗體和一個用於查詢 Pubs 以獲取這些作者的數據訪問類數據訪問類 Authorcs使用 Microsoft 數據訪問應用程序塊最小化數據訪問所需的代碼量在添加緩存支持之前它包含兩個方法ListAuthors() 和 ListAuthors(string state)每個方法返回一個帶有 Authors 表內容的 DataTable—後者用 state 列的值過濾添加緩存支持之前的 ListAuthors() 方法如代碼示例 所示
  
  代碼示例 沒有緩存支持的簡單數據訪問方法
  
  public static DataTable ListAuthors()
  {
  return SqlHelperExecuteDataset(ConnectionString
  CommandTypeText
  SELECT * FROM Authors)Tables[];
  }
  
  使用 CacheConfig 為該方法添加緩存支持必須首先創建一個匹配 GetDataTableCalllback 委托簽名的新重載這意味著必須返回一個 DataTable 並接受一個對象數組作為它唯一的參數我們將把實際數據訪問代碼移動到這個新方法中如代碼示例 所示
  
  代碼示例 把實際數據訪問代碼移動到匹配委托的方法中
  
  protected static DataTable ListAuthors(object[] args)
  {
  return SqlHelperExecuteDataset(ConnectionString
  CommandTypeText
  SELECT * FROM Authors)Tables[];
  }
  
  創建新方法後更改原始方法以使用 CacheConfigDeCache() 方法並向它發送一個引用新 ListAuthors(object[]) 方法的回調函數代碼示例 顯示了 ListAuthors() 的新版本
  
  代碼示例 ListAuthors()現在修改為包含緩存支持
  
  public sta
From:http://tw.wingwit.com/Article/program/net/201311/11320.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.