爲了程序的靈活性,可能爲程序使用了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; //一、獲取內存緩存對象 ObjectCache cache = MemoryCache.Default; //二、經過Key判斷緩存中是否已有詞典內容(Key在存入緩存時設置) if (cache.Contains(cacheKey)) { //三、直接從緩存中讀取詞典內容 configs = cache.GetCacheItem(cacheKey).Value as Dictionary<string, string>; } else { //三、讀取配置文件,組成詞典對象,準備放到緩存中 configs = GetFromXml(); //四、檢查是否讀取到配置內容 if (configs != null) { //四、新建一個CacheItemPolicy對象,該對象用於聲明配置對象在緩存中的處理策略 CacheItemPolicy policy = new CacheItemPolicy(); //五、由於配置文件一直須要讀取,因此在此設置緩存優先級爲不該刪除 // 實際狀況請酌情考慮,同時能夠設置AbsoluteExpiration屬性指定過時時間 policy.Priority = CacheItemPriority.NotRemovable; //六、將詞典內容添加到緩存,傳入 緩存Key、配置對象、對象策略 // Set方法首先會檢查Key是否在緩存中存在,若是存在,更新value,不存在則建立新的 // 這裏先加入緩存再加監視的緣由是:在緩存加入時,也會觸發監視事件,會致使出錯。 cache.Set(cacheKey, configs, policy); //七、監視文件須要傳入一個IList對象,因此即使只有一個文件也須要新建List對象 List<string> filePaths = new List<string>() { "c:\config.xml" }; //八、新建一個文件監視器對象,添加對資源文件的監視 HostFileChangeMonitor monitor = new HostFileChangeMonitor(filePaths); //九、調用監視器的NotifyOnChanged方法傳入發生改變時的回調方法 monitor.NotifyOnChanged(new OnChangedCallback((o) => { cache.Remove(cacheKey); } )); //十、爲配置對象的緩存策略加入監視器 policy.ChangeMonitors.Add(monitor); } } return configs; }
反正緩存用起來也就是經過Key來增刪改查,內存緩存還能夠在config中的配置對內存的使用狀況,其實默認自動管理也不錯哈。spa
相關內容能夠查閱msdn:http://msdn.microsoft.com/ZH-CN/library/vstudio/dd941872(v=vs.110).aspxcode