• .NET 4.0 缓存


    参考:

    https://www.cnblogs.com/wuhuacong/p/6518748.html

    https://www.cnblogs.com/RainbowInTheSky/p/5557936.html

    https://www.cnblogs.com/TianFang/p/3430169.html

    http://www.cnblogs.com/wuhuacong/p/5889305.html

    .NET 4.0的缓存功能主要由三部分组成:System.Runtime.Caching,System.Web.Caching.Cache和Output Cache。

    System.Runtime.Caching这是在.NET 4.0中新增的缓存框架,主要是使用MemoryCache对象,该对象存在于程序集System.Runtime.Caching.dll。

    System.Web.Caching.Cache这个则是在.NET2.0开始就一直存在的缓存对象,一般主要用在Web中,当然也可以用于Winform里面,不过要引用System.Web.dll。

    Output Cache则是Asp.NET里面使用的,在ASP.NET 4.0之前的版本都是直接使用System.Web.Caching.Cache来缓存HTML片段。在ASP.NET 4.0中对它进行了重新设计,提供了一个OutputCacheProvider供开发人员进行扩展,但是它默认情况下,仍然使用System.Web.Caching.Cache来做做缓存

    一、System.Runtime.Caching

    一个Cache框架主要包括三个部分:ObjectCache、CacheItemPolicy、ChangeMonitor。

    • ObjectCache表示一个CachePool,它提供了Cache对象的添加、获取、更新等接口,是Cache框架的主体。它是一个抽象类,并且系统给了一个常用的实现——MemoryCache。
    • CacheItemPolicy则表示Cache过期策略,例如保存一定时间后过期。它也经常和ChangeMonitor一起使用,以实现更复杂的策略。
    • ChangeMonitor则主要负责CachePool对象的状态维护,判断对象是否需要更新。它也是一个抽象类,系统也提供了几个常见的实现:CacheEntryChangeMonitor、FileChangeMonitor、HostFileChangeMonitor、SqlChangeMonitor。

    1、简单使用(HostFileChangeMonitor)

    public static class CacheHelper
        {
            public static MenuStore GetMenuConfig(string cacheKey, string path)
            {
                MenuStore _Menu = new MenuStore();
    
                //1、获取内存缓存对象
                ObjectCache cache = MemoryCache.Default;
    
                //2、通过Key判断缓存中是否已有词典内容(Key在存入缓存时设置)
                if (cache.Contains(cacheKey))
                {
                    //3、直接从缓存中读取词典内容
                    _Menu = cache.GetCacheItem(cacheKey).Value as MenuStore;
                }
                else
                {
                    _Menu = (MenuStore)RRTools3.Utility.Serialization.XmlDeserialize(
                   File.ReadAllText(path), typeof(MenuStore));
    
                    if (_Menu != null)
                    {
                        CacheItemPolicy policy = new CacheItemPolicy();
                        policy.Priority = CacheItemPriority.NotRemovable;
    
                        cache.Set(cacheKey, _Menu, policy);
    
                        //7、监视文件需要传入一个IList对象,所以即便只有一个文件也需要新建List对象
                        List<string> filePaths = new List<string>() { path };
    
                        //8、新建一个文件监视器对象,添加对资源文件的监视
                        HostFileChangeMonitor monitor = new HostFileChangeMonitor(filePaths);
    
                        //9、调用监视器的NotifyOnChanged方法传入发生改变时的回调方法
                        monitor.NotifyOnChanged(new OnChangedCallback((o) =>
                        {
                            cache.Remove(cacheKey);
                        }
                            ));
    
                        //10、为配置对象的缓存策略加入监视器
                        policy.ChangeMonitors.Add(monitor);
                    }
                }
                return _Menu;
            }
        }

    2、CacheManager

    CacheManager是一个以C#语言开发的开源.Net缓存框架抽象层。它不是具体的缓存实现,但它支持多种缓存提供者(如Redis、Memcached等)并提供很多高级特性。

    https://files.cnblogs.com/files/caolingyi/Caching.zip

  • 相关阅读:
    何为优秀的前端?
    CSS清除浮动的三个方法
    CSS3 速查手册
    高性能JavaScript
    chrome开发者工具使用
    AndroidJetpack数据处理之数据库Room和懒加载Paging
    AndroidJetpack Fragment之Navigation和ViewPager2
    第一行代码之菜单
    Day1
    1.16 24点游戏
  • 原文地址:https://www.cnblogs.com/caolingyi/p/8528786.html
Copyright © 2020-2023  润新知