爲程序使用內存緩存(MemoryCache)

爲了程序的靈活性,可能爲程序使用了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

相關文章
相關標籤/搜索