網上有很多資料講解怎麼使用,主要是在是使用時碰到一個很郁悶的錯誤,一下内容有摘抄的博友的有自己寫的,大家将就看吧。
建立 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來進行比較的。