zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    ArcGIS API for Python
    ArcGIS Engine二次开发:从入门到精通
    OAuth2.0是什么?
    ArcGIS如何使用ArcToolbox新建要素类
    后端如何返回json
    Flask框架和Django框架
    ArcGIS时间——ArcToolbox
    ArcGIS时区设置2-编辑器追踪属性
    使用ABAP代码生成二维码(QR Code)
    如何自行分析SAP WebClient UI开发环境里抛出的错误消息根源
  • 原文地址:https://www.cnblogs.com/caolingyi/p/8528786.html
Copyright © 2011-2022 走看看