為程序使用內存緩存(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;

    //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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM