天天看點

Enterprise Library5.0 緩存使用篇

網上有很多資料講解怎麼使用,主要是在是使用時碰到一個很郁悶的錯誤,一下内容有摘抄的博友的有自己寫的,大家将就看吧。

建立 cachingConfiguration 的配置節處理程式時出錯: 未能加載檔案或程式集“Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一個依賴項。找到的程式集清單定義與程式集引用不比對。 (異常來自 HRESULT:0x80131040)

這個錯誤剛開始是以為沒有裝.net3.5 SP1的事呢,裝上也不行,最後發現用EntLibConfig.exe打開他自己生成的config配置檔案業報同樣的錯誤,

初步懷疑是生成的config配置檔案有問題,在生成一個還是報同樣的錯誤,等生成第三遍的時候在打開沒有報錯,服務到應用程式目錄,一切正常。

簡單使用代碼:

 1        public Form1()

 2         {

 3             InitializeComponent();

 4         }

 5 

 6         ICacheManager cacheManager;

 7 

 8         private void button1_Click(object sender, EventArgs e)

 9         {

10             AbsoluteTime _ExpireTime = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒後過期

11 

12             cacheManager.Add("aaa1", "aaa1_value", CacheItemPriority.Normal, null, _ExpireTime);//加入緩存

13         }

14 

15         private void Form1_Load(object sender, EventArgs e)

16         {

17             cacheManager = CacheFactory.GetCacheManager("Cache Manager");//執行個體化ICachemanager

18         }

19 

20         private void button2_Click(object sender, EventArgs e)

21         {

22             this.richTextBox1.Text = cacheManager.GetData("aaa1").ToString();

23         }

下面介紹如何使用Microsoft Enterprise Library 5.0中的緩存應用程式子產品.

1.下載下傳安裝好MicrosoftEnterprise Library 5.0,然後在運作EntLibConfig.exe

2.  選擇Blocks菜單 ,單擊 Add CachingSettings .

  配置屬性說明:

3.  點選 File 菜單,單擊 Save,儲存為一個App.config檔案,可以先儲存到桌面,之後要用到它. 用記事本打開App.config,可以看到如下内容.

<configuration>

  <configSections>

    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null" requirePermission="true" />

  </configSections>

  <cachingConfiguration defaultCacheManager="Cache Manager">

    <cacheManagers>

      <add name="Cache Manager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"

          expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"

          numberToRemoveWhenScavenging="10" backingStoreName="NullBackingStore" />

    </cacheManagers>

    <backingStores>

      <add name="Isolated Storage Cache Store" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.IsolatedStorageBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"

          encryptionProviderName="" partitionName="asdfsdf" />

      <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"

          name="NullBackingStore" />

    </backingStores>

  </cachingConfiguration>

</configuration>

EnterpriseLibrary的Cache提供了非常強大的支援,可以設定絕對時間、間隔時間、自定義格式以及檔案過期時間來進行相應的更新操作。

        1. 絕對時間過期的緩存:AbsoluteTime

        2. 相對時間過期的緩存:SlidingTime

        3. 自定義格式過期的緩存:ExtendedFormatTime

           自定義格式為:<Minute> <Hour> <Day of month> <Month> <Day of week>

           Minute            0-59

           Hour              0-23

           Day of month     1-31

           Month             1-12

           Day of week       0-6 (Sunday is 0)

           如:

           * * * * *    - expires every minute

           5 * * * *    - expire 5th minute of every hour 

           * 21 * * *   - expire every minute of the 21st hour of every day

           31 15 * * *  - expire 3:31 PM every day

           7 4 * * 6    - expire Saturday 4:07 AM

        4.檔案依賴:FileDependency    指定緩存依賴于某一檔案

           FileDependency _fileDep = new FileDependency("R:\\1.txt");//指定緩存依賴于某一檔案

          寫入緩存資料時如果使用了FileDependency方式,最終的效果會讓緩存是否過期依賴于某一個具體的檔案,隻要這個檔案沒有修改,緩存一直

           有效,反之如果這個檔案被修改過了,則緩存立即過期。

        5.永不過期:NeverExpired

使用如:

//絕對時間過期的緩存

 AbsoluteTime _ExpireTime = new AbsoluteTime(DateTime.Now.AddSeconds(30));//指定30秒後過期

//自定義格式過期的緩存

ExtendedFormatTime expireTime = new ExtendedFormatTime("41 11 * * *");

        Cache以配置檔案的方式供使用者進行緩存的輪詢過期資料的頻率、緩存中資料項的多少、清除資料項的多少以及緩存備份的位置。

 1.    expirationPollFrequencyInSeconds: 設定控制背景排程程式多久檢查過期條目的定時器。此屬性必須是正整數,且是必要的。

 2.    maximumElementsInCacheBeforeScavenging: 設定在清除開始前可以在緩存中的條目的最大數量。此屬性必須是正整數,且是必要的。 

 3.    numberToRemoveWhenScavenging: 設定在清除開始時移除的條目的數量,此屬性必須是正整數,且是必要的。 

 4.    backingStoreName: 緩存備份的位置

        值得一提的是,expirationPollFrequencyInSeconds屬性是控制背景排程程式多久檢查過期條目的配置,機關為秒,如果系統經常需要更新資料則可以将此值設定的小一點;ICacheItemExpiration的時間是以UTC的時間來作為标準時間來比較的,中原標準時間比UTC早8個小時,比如你需要在每天的十二點半讓緩存過期,則必須這樣設定ExtendedFormatTime("30 4 * * *"), 關于這個問題我本來不知道,以為是Library的Bug,上網也沒有找到相關的例子,最後在看了原程式才知道Library是用的UTC來進行比較的。