Enterprise Library for .NET Framework 2.0 是微軟發布的企業庫,它支持.NET Framework 2.0。并且由一系列的企業應用程序塊來構成。本文即以實例展示了Enterprise Library for .NET Framework 2.0緩存的使用方法,供大家參考。
關鍵代碼如下:
using Microsoft.Practices.EnterpriseLibrary.Caching;using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;using System;namespace ETLUtilHelpV2{ /// <summary> /// Enterprise Library for .NET Framework 2.0 緩存工具類 /// </summary> public class ETLCacheToolV2 { /* *在Caching Application Block中,主要提供以下四種保存緩存數據的途徑, *分別是:內存存儲(默認)、獨立存儲(Isolated Storage)、 *數據庫存儲(DataBase Cache Storage)和自定義存儲(Custom Cache Storage)。 *In-Memory:保存在內存中。 *Isolated Storage Cache Store:系統將緩存的信息保存在獨立文件中(C:/Users/<<user name>>/AppData/Local/IsolatedStorage)。 *Data Cache Storage:將緩存數據保存在數據庫中。(需要運行CreateCachingDatabase.sql腳本) *Custom Cache Storage:自己擴展的處理器。我們可以將數據保存在注冊表中或文本文件中。 * * 緩存等級,在企業庫的緩存模塊中已經提供了4個緩存等級:Low,Normal,High和NotRemovable,在超出最大緩存數量后會自動根據緩存等級來移除對象。 * 過期方式,企業庫默認提供4種過期方式 * AbsoluteTime:絕對是時間過期,傳遞一個時間對象指定到時過期 * SlidingTime:緩存在最后一次訪問之后多少時間后過期,默認為2分鐘,有2個構造函數可以指定一個過期時間或指定一個過期時間和一個最后使用時 * ExtendedFormatTime :指定過期格式,以特定的格式來過期,通過ExtendedFormat.cs類來包裝過期方式,具體可參照ExtendedFormat.cs,源代碼中已經給出了很多方式 * FileDependency:依賴于文件過期,當所依賴的文件被修改則過期,這個我覺得很有用,因為在許多網站,如論壇、新聞系統等都需要大量的配置,可以將配置文件信息進行緩存,將依賴項設為配置文件,這樣當用戶更改了配置文件后通過ICacheItemRefreshAction.Refresh可以自動重新緩存。 */ ///// <summary> ///// 自定義緩存刷新操作 ///// </summary> //[Serializable] //public class CacheItemRefreshAction : ICacheItemRefreshAction //{ // #region ICacheItemRefreshAction 成員 // /// <summary> // /// 自定義刷新操作 // /// </summary> // /// <param name="removedKey">移除的鍵</param> // /// <param name="expiredValue">過期的值</param> // /// <param name="removalReason">移除理由</param> // void ICacheItemRefreshAction.Refresh(string removedKey, object expiredValue, CacheItemRemovedReason removalReason) // { // if (removalReason == CacheItemRemovedReason.Expired) // { // CacheManager cache = CacheFactory.GetCacheManager(); // cache.Add(removedKey, expiredValue); // } // } // #endregion //} static CacheManager CacheMgr = null; static ETLCacheToolV2() { CacheMgr = CacheFactory.GetCacheManager(); } /// <summary> /// 獲取CacheManager實例 /// </summary> /// <returns>CacheManager</returns> public static CacheManager Instance() { return CacheMgr; } /// <summary> /// 添加緩存 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> public static void Add(string key, object value) { CacheMgr.Add(key, value); } /// <summary> /// 添加緩存_滑動過期_小時 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="hour">小時</param> public static void AddWithHour(string key, object value, int hour) { CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromHours(hour))); } /// <summary> /// 添加緩存_滑動過期_天 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="days">天</param> public static void AddWithDay(string key, object value, int days) { CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromDays(days))); } /// <summary> /// 添加緩存_滑動過期_毫秒 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="millisecond">毫秒</param> public static void AddWithMillisecond(string key, object value, int millisecond) { CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromMilliseconds(millisecond))); } /// <summary> ///添加緩存_滑動過期_分鐘 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="minutes">分鐘</param> public static void AddWithMinutes(string key, object value, int minutes) { CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromMinutes(minutes))); } /// <summary> ///添加緩存_滑動過期_秒 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="seconds">秒</param> public static void AddWithSeconds(string key, object value, int seconds) { CacheMgr.Add(key, value, CacheItemPriority.Normal, null, new SlidingTime(TimeSpan.FromSeconds(seconds))); } /// <summary> /// 添加緩存_滑動過期_文件依賴 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="filePath">文件路徑</param> public static void AddFileDependency(string key, object value, string filePath) { FileDependency _fileDependency = new FileDependency(filePath); CacheMgr.Add(key, value, CacheItemPriority.Normal, null, _fileDependency); } /// <summary> /// 添加緩存_滑動過期_小時 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="hour">小時</param> /// <param name="refreshAction">ICacheItemRefreshAction</param> public static void AddWithHour(string key, object value, int hour, ICacheItemRefreshAction refreshAction) { CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromHours(hour))); } /// <summary> /// 添加緩存_滑動過期_天 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="days">天</param> /// <param name="refreshAction">ICacheItemRefreshAction</param> public static void AddWithDay(string key, object value, int days, ICacheItemRefreshAction refreshAction) { CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromDays(days))); } /// <summary> /// 添加緩存_滑動過期_毫秒 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="millisecond">毫秒</param> /// <param name="refreshAction">ICacheItemRefreshAction</param> public static void AddWithMillisecond(string key, object value, int millisecond, ICacheItemRefreshAction refreshAction) { CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromMilliseconds(millisecond))); } /// <summary> /// 添加緩存_滑動過期_分鐘 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="minutes">分鐘</param> /// <param name="refreshAction">ICacheItemRefreshAction</param> public static void AddWithMinutes(string key, object value, int minutes, ICacheItemRefreshAction refreshAction) { CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromMinutes(minutes))); } /// <summary> /// 添加緩存_滑動過期_秒 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="seconds">秒</param> /// <param name="refreshAction">ICacheItemRefreshAction</param> public static void AddWithSeconds(string key, object value, int seconds, ICacheItemRefreshAction refreshAction) { CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, new SlidingTime(TimeSpan.FromSeconds(seconds))); } /// <summary> /// 添加緩存_滑動過期_文件依賴 /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="filePath">文件路徑</param> /// <param name="refreshAction">ICacheItemRefreshAction</param> public static void AddFileDependency(string key, object value, string filePath, ICacheItemRefreshAction refreshAction) { FileDependency _fileDependency = new FileDependency(filePath); CacheMgr.Add(key, value, CacheItemPriority.Normal, refreshAction, _fileDependency); } /// <summary> /// 清空緩存 /// </summary> public static void Flush() { CacheMgr.Flush(); } /// <summary> /// 移出緩存 /// </summary> /// <param name="key"></param> public static void Remove(string key) { if (CacheMgr.Contains(key)) CacheMgr.Remove(key); } /// <summary> /// 獲取緩存 /// </summary> /// <param name="key">鍵</param> /// <returns>值</returns> public static object GetData(string key) { if (CacheMgr.Contains(key)) return CacheMgr.GetData(key); return null; } /// <summary> /// 獲取緩存 /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="key">鍵</param> /// <returns>值</returns> public static T GetData<T>(string key) { if (CacheMgr.Contains(key)) return (T)CacheMgr.GetData(key); return default(T); } }}
讀者可在自身項目中對上述代碼加以測試,相信會對大家的C#程序設計起到一定的幫助作用。
新聞熱點
疑難解答