為了程序的靈活性,可能為程序使用了XML等外部文件存儲配置,但也有可能文件內容會被頻繁讀取,為了減少磁盤的讀取次數,提高程序性能,可以將頻繁讀取的配置文件緩存到內存中,加速配置的讀取。並且需要可以在配置文件更改后及時的更新緩存。
(該功能可能是.NET Framework 4.0 新加,其他低版本未測試)
下面通過一個方法來說明緩存的使用方法,說明詳見注釋:
/// <summary> /// 從內存緩存中讀取配置。若緩存中不存在,則重新從文件中讀取配置,存入緩存 /// </summary> /// <param name="cacheKey">緩存Key</param> /// <returns>配置詞典</returns> private static Dictionary<string, string> GetConfigDictionary(string cacheKey) { Dictionary<string, string> configs = null; //1、獲取內存緩存對象 ObjectCache cache = MemoryCache.Default; //2、通過Key判斷緩存中是否已有詞典內容(Key在存入緩存時設置) if (cache.Contains(cacheKey)) { //3、直接從緩存中讀取詞典內容 configs = cache.GetCacheItem(cacheKey).Value as Dictionary<string, string>; } else { //3、讀取配置文件,組成詞典對象,准備放到緩存中 configs = GetFromXml(); //4、檢查是否讀取到配置內容 if (configs != null) { //4、新建一個CacheItemPolicy對象,該對象用於聲明配置對象在緩存中的處理策略 CacheItemPolicy policy = new CacheItemPolicy(); //5、因為配置文件一直需要讀取,所以在此設置緩存優先級為不應刪除 // 實際情況請酌情考慮,同時可以設置AbsoluteExpiration屬性指定過期時間 policy.Priority = CacheItemPriority.NotRemovable; //6、將詞典內容添加到緩存,傳入 緩存Key、配置對象、對象策略 // Set方法首先會檢查Key是否在緩存中存在,如果存在,更新value,不存在則創建新的 // 這里先加入緩存再加監視的原因是:在緩存加入時,也會觸發監視事件,會導致出錯。 cache.Set(cacheKey, configs, policy); //7、監視文件需要傳入一個IList對象,所以即便只有一個文件也需要新建List對象 List<string> filePaths = new List<string>() { "c:\config.xml" }; //8、新建一個文件監視器對象,添加對資源文件的監視 HostFileChangeMonitor monitor = new HostFileChangeMonitor(filePaths); //9、調用監視器的NotifyOnChanged方法傳入發生改變時的回調方法 monitor.NotifyOnChanged(new OnChangedCallback((o) => { cache.Remove(cacheKey); } )); //10、為配置對象的緩存策略加入監視器 policy.ChangeMonitors.Add(monitor); } } return configs; }
反正緩存用起來也就是通過Key來增刪改查,內存緩存還可以在config中的配置對內存的使用情況,其實默認自動管理也不錯哈。
相關內容可以查閱msdn:http://msdn.microsoft.com/ZH-CN/library/vstudio/dd941872(v=vs.110).aspx