为程序使用内存缓存(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
转载于:https://www.cnblogs.com/xwgli/p/3306149.html
为程序使用内存缓存(MemoryCache)相关推荐
- 内存缓存MemoryCache
内存缓存MemoryCache实现了ICache接口,Redis同样实现了ICache接口,两者在缓存操作上达到了高度抽象统一.应用设计时一律使用ICache接口,开发环境装配为MemoryCache ...
- 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )
文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...
- 关于 ASP.NET 内存缓存你需要知道的 10 点
缓存机制的主要目的是提高应用程序的性能.作为 ASP.NET 开发人员,你可能会意识到 ASP.NET Web 窗体以及 ASP.NET MVC 可以使用 Cache 对象缓存应用程序的数据.这通常被 ...
- Android UIL图片加载缓存源码分析-内存缓存
本篇文章我们来分析一下著名图片加载库Android-Universal-Image-Loader的图片缓存源码. 源码环境 版本:V1.9.5 GitHub链接地址:https://github.co ...
- 微信小程序开发-视频多大小程序就会缓存多大,导致小程序内存不足自动闪退的问题解决方法
微信小程序开发- 一开始添加的视频是mp4 格式的,视频多大微信小程序就会缓存多大, 但是我如果直接在微信聊天打开视频链接就不会,缓存就很少. 比如我有个视频1G, 把它放到腾讯云对象存储,把视频链接 ...
- ASP.NET Core中的内存缓存
ASP.NET Core中的内存中缓存 让我们看看如何通过缓存优化ASP.NET Core应用程序性能 我相信,在我们的工作中,每个人都收到来自客户的请求或来自我们应用程序用户的反馈,以提高响应速度. ...
- YYCache 源码解析(一):使用方法,架构与内存缓存的设计
YYCache是国内开发者ibireme开源的一个线程安全的高性能缓存组件,代码风格简洁清晰,阅读它的源码有助于建立比较完整的缓存设计的思路,同时也能巩固一下双向链表,线程锁,数据库操作相关的知识. ...
- 程序在内存中运行的奥秘
简介 当丰富多彩的应用程序在计算机上运行,为你每天的工作和生活带来便利时,你是否知道它们是如何在计算机中工作呢?本文用形象的图表与生动的解释,揭示了程序在计算机中运行的奥秘. 内存管理是操作系统的核心 ...
- 如何优化cocos2d程序的内存使用和程序大小:第一部分
译者: 在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区 ...
- Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件
文章目录 1.查看系统版本 2.显示目录的大小 3.查看硬盘是HDD还是SSD 4.硬盘测速 5.在ssh的时候自动输入密码 6.查看程序的内存使用情况 7.查看I/O的速度 8.查看ssh密码错误日 ...
最新文章
- ubuntu分屏软件_Ubuntu 17.10安装终端分屏:Terminator终端终结者
- [摘抄]江湖经验:喝酒时玩的游戏大全!
- 聊聊LightProbe原理实现以及对LightProbe数据的修改
- 杜教筛--51nod1239 欧拉函数之和
- (pytorch-深度学习系列)模型参数的初始化与访问操作-学习笔记
- java 全排序_Java排序算法全
- ue4 网络代码分析
- SQL 2016 性能调优培训来了!!! 还免费!!!
- TensorFlow神经网络(八)卷积神经网络之Lenet-5
- 苹果回忆:为证明 iPhone 结实,乔布斯拿起手机就往地上摔
- vs 设置护眼背景颜色
- 深度学习核心词汇-英文
- 自组织(竞争型)神经网络
- android录音波浪动画_Android实现炫酷的波浪下载Loading动画
- ie浏览器读取本地文件并上传
- 回溯法—子集树与排列树
- 保证你会爱上的软件--私藏
- php游戏简单模块,PHP编写的25个游戏脚本
- 字符串查找函数 php,php字符串查找函数(strrpos与strchr)
- linux 32位中文版,Linux_Deepin_2014下载|Linux Deepin 2014.3 官方简体中文最新版(32位/64位) - 飞极下载站...