当前位置: 首页 > 编程日记 > 正文

全面认识一下.NET 4.0的缓存功能

很多关于.NET 4.0新特性的介绍,缓存功能的增强肯定是不会被忽略的一个重要亮点。在很多文档中都会介绍到在.NET 4.0中,缓存功能的增强主要是在扩展性方面做了改进,改变了原来只能利用内存进行缓存的局限,允许用户在不改变代码的情况下通过修改配置的方式,灵活的切换缓存介质。Cache Provider是可扩展的,开发人员可以方便的将缓存存放在文件中,也可以扩展使用分布式缓存。然而,由于之前已经有System.Web.Caching.Cache这个缓存对象的存在,让我一直对.NET 4.0的新的Cache和原来已存在的System.Web.Caching.Cache的关系产生了一定的迷惑。通过这一两天的研究,让我慢慢解开了这层迷惑。

回顾.NET 4.0以前的缓存功能

事实上,在.NET4.0以前并没有存在一个实际意义上的.NET Framework的缓存框架,实际上它是一个专为ASP.NET设计的缓存框架。在ASP.NET中,缓存分为两种:输出缓存(Output Cache)和数据缓存。输出缓存是用在需要对已经生成好的页面HTML或页面中部分HTML(User Control)进行缓存,减少某些静态内容的生成次数,从而提高请求响应时间。数据缓存,是开发人员希望缓存某些常用、并且极少更新的数据,让这些数据缓存在内存中,以减少数据的读取次数,从而提高程序的性能。而这两种缓存都是使用System.Web.Caching.Cache来缓存数据。

System.Web.Caching.Cache

它是一个内存缓存的实现,并不提供缓存介质的扩展,数据直接缓存在内存中。这个对象一般情况下,我们不会自己去实例化。通常在页面里面,我们会直接使用Page.Cache进行缓存操作,而不会去关心它是如何被实例化的。而在页面以外的地方要使用缓存,我们可以通过全局的System.Web.Context.Current.Cache来进行缓存操作,同样的你还可以使用System.HttpRuntime.Cache。其实如果我们通过Reflector去追踪这几个对象的关系,你不难发现虽然有这么多地方都有Cache对象,实际上它们都是引用同一个对象,那就是HttpRuntime.Cache这个对象。特别要注意的是,System.HttpRuntime.Cache不仅仅可用于Web环境下,它也可以在任何程序中使用,包括WinForm,Console Application,但是前提是你必须引用System.Web.dll。这也就说明了,System.Web.Caching.Cache这个对象完全是可以脱离于System.Web这个名称空间,而作为一个独立的缓存框架而存在。这也是我迷惑的第一个地方:System.Web.Caching.Cache会不会改变现有的实现,而直接使用新的可扩展的缓存框架?

.NET 4.0中的缓存功能全解析

.NET 4.0的缓存功功由三部分组成:System.Runtime.Caching,System.Web.Caching.Cache和Output Cache。下面分别对这三者以及它们之前的关系进行解析:

System.Runtime.Caching

这是在.NET 4.0中新增的缓存框架,存在于程序集System.Runtime.Caching.dll,在这份PPT中提到的System.Caching指的就是它。它是一个可扩展的数据缓存框架,内置提供了内存缓存的实现MemoryCache。但是它在使用上却不是那么可扩展,除了提供ObjectCache这个抽象类外,并没有提供可扩展的配置方案,我们无法通过配置方案来切换ObjectCache的实现,我们必须在代码里面硬编码我们要使用的ObjectCache实现:

?

1

ObjectCache objectCache = MemoryCache.Default;//

System.Runtime.Caching.Configuration里面的配置也是针对MemoryCache。这些配置意义在于指定每个MemoryCache实例运行的内存使用配额方案,和配额检查周期。MemoryCache.Default的实例名称为“Default”,这样我们就可以通过下面的配置来更改MemoryCache.Default的内存配额:

?

1

2

3

4

5

6

7

<system.runtime.caching>

<memoryCache>

<namedCaches>

<add name="Default" cacheMemoryLimitMegabytes="10" pollingInterval="00:02:00"/>

</namedCaches>

</memoryCache>

</system.runtime.caching>

缓存过期策略与其它的缓存框架大同小异,与System.Web.Caching.Cache的不同只是名称不叫CacheDependency,而叫ChangeMonitor,并且提供了基于文件和目录的缓存依赖策略。

System.Web.Caching.Cache

原先我一直在找答案,System.WebCaching.Cache底层是否改为使用System.Runtime.Caching,得到的结果是它没有任何的变化。

Output Cache

Output Cache有了比较大的变化,ASP.NET 4.0之前的版本都是直接使用System.Web.Caching.Cache来缓存HTML片段。在ASP.NET 4.0中对它进行了重新设计,提供了一个OutputCacheProvider供开发人员进行扩展,但是它默认情况下,仍然使用System.Web.Caching.Cache来做做缓存。关于ASP.NET 4.0的Output Cache的使用,请参考ScottGU的文章。

以上,我们可以得出的结果是,System.Runtime.Caching和Output Cache是可扩展的。并且,他们二者之间没有任何关系,提供的扩展接口差别也非常大,需要分别进行实现。System.Runtime.Caching完全可以用于替代Enterprise Library Cache Application Block的作用,并且微软所发布的分布式缓存框架Windows Server AppFabric应该已经提供了System.Runtime.Caching的扩展。

http://www.cnblogs.com/hjf1223/archive/2010/07/16/1779148.html

转载于:https://www.cnblogs.com/luckjason/archive/2012/08/02/2619862.html

相关文章:

【直播】王茂霖:二手车交易价格预测 Baseline 提高(河北高校数据挖掘邀请赛)

二手车交易价格预测 Baseline 提高 目前 河北高校数据挖掘邀请赛 正在如火如荼的进行中。为了大家更好的参赛&#xff0c;王茂霖分享了 从0梳理1场数据挖掘赛事&#xff01;&#xff0c;完整梳理了从环境准备、数据读取、数据分析、特征工程到数据建模的整个过程。04月01日晚&a…

java培训要学习多久?

java技术要学习的内容有很多&#xff0c;那么究竟java培训要学习多久?这是很多同学都比较关注的一个问题&#xff0c;首先我们来详细的了解一下java培训的学习路线都有哪些&#xff0c;具体要花多少时间学习吧。  ​ java培训要学习多久? 1.Java语言介绍 从基础语法、面向对…

数据库范式温习

简介 关系数据库中的关系必须满足一定的要求&#xff0c;即满足不同的范式。 目前关系数据库有六种范式&#xff1a;第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&#xff08;3NF&#xff09;、第四范式&#xff08;4NF&#xff09;、…

使用 git 管理 portage tree

安装 git.备份原来的 portage tree.克隆 funtoo.cd /usr && rm -rf portage && git clone git://github.com/funtoo/portage.git 仓库中有gentoo.org, funtoo.org, master三个分支. 分支 gentoo.org 就是 gentoo 的官方 portage tree, 只不过是由 Daniel Robb…

02 Scratch等级考试(二级)模拟题

青少年编程竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

怎样找到适合自己的UI设计培训班

UI设计这个行业近几年有越来越多的人都比较关注&#xff0c;市面上的UI设计培训机构也越来越多&#xff0c;很多零基础同学都在寻找适合自己的UI设计培训机构&#xff0c;那么怎样找到适合自己的UI设计培训班呢?来 怎样找到适合自己的UI设计培训班? 一、看课程内容 UI设计行业…

Global.asax详解

在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void Application_BeginRequest(Object sender, EventArgs e){ Application["StartTime"] System.DateTime.Now…

Openfire服务器的安装部署

Openfire是一个强大的即时消息&#xff08;IM&#xff09;和聊天服务器&#xff0c;它实现了XMPP协议,可以使用它轻易的构建高效率的即时通信服务器. 其安装和部署都十分简单&#xff0c;并利用Web进行管理。单台服务器可支持上万并发用户&#xff0c;由于是采用开放的XMPP协议…

【直播】耿远昊:Pandas入门讲解(安泰第四届数据科学训练营)

Pandas入门讲解 直播信息 主讲人&#xff1a;耿远昊&#xff0c;Datawhale成员&#xff0c;joyful-pandas作者。 直播时间&#xff1a;2021年04月07日 20:00~21:00 直播内容&#xff1a; 时间序列中的必知必会&#xff1a;深入理解时间对象掌握滑动窗口熟悉重采样操作 直播…

女生参加软件测试培训合适吗

女生参加软件测试培训合适吗?这个问题困扰着很多女性朋友&#xff0c;大部分女性觉得软件测试属于IT技术行业&#xff0c;学起来是比较麻烦的&#xff0c;不知道是否适合女性&#xff0c;我们来看看下面的详细介绍。 女生参加软件测试培训合适吗?当然合适&#xff0c;如果说要…

三、概念数据模型CDM(Conceptual Database Model )

最后整理一下正确的是&#xff1a; 脚本1&#xff1a; .set_value(_First, true, new) .foreach_part(%Name%, "#") .if (%_First%) .delete(%CurrentPart%) .enddelete.set_value(_First, false, update) .else %CurrentPart% .endif .next 这个例子是把Name内容的…

【第11周复盘】小朋友们 100% 闯关成功!

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

keepalived and heartbeat

Keepalived使用的vrrp协议方式&#xff0c;虚拟路由冗余协议 (Virtual Router Redundancy Protocol&#xff0c;简称VRRP)&#xff1b;Heartbeat是基于主机或网络的服务的高可用方式&#xff1b;keepalived的目的是模拟路由器的双机heartbeat的目的是用户service的双机lvs的高可…

ui设计师要养成哪些职场习惯呢?

很多参加UI设计培训学完后的同学&#xff0c;都比较担心后期找工作的问题&#xff0c;不知道自己在职场中应该如何应对&#xff0c;小编本期为大家详细的介绍一下ui设计师要养成哪些职场习惯呢?希望能够帮助到大家在职场中更好的表现。 UI设计培训分享&#xff1a;ui设计师要养…

Html-Css 从入门到放弃(一)基础知识

注意要点&#xff1a; 1、ID属性不要以数字开头&#xff0c;数字开头的ID在 Mozilla/Firefox 浏览器中不起作用。 2、class 选择器用于描述一组元素的样式&#xff0c;class 选择器有别于id选择器&#xff0c;class可以在多个元素中使用。 3、不要在属性值与单位之间留有空格。…

六一:如何在Datawhale开源学习小程序中管

我们的组队学习马上就要开营了&#xff0c;本次组队学习与以往不同的是小程序中增加了队伍管理的功能。 为了方便大家组队&#xff0c;Datawhale的 六一同学 为大家准备了在Datawhale开源学习小程序中队伍管理的教程。 一、进入课程详情界面 1、打开小程序主页后&#xff0c…

C#让windows程序只运行一次

方法一&#xff1a;使用Mutex来进行1&#xff0e;首先要添加如下的namespace&#xff1a; using System.Threading;2&#xff0e;修改系统Main函数&#xff0c;大致如下&#xff1a; bool bCreatedNew;//Create a new mutex using specific mutex nameMutex m new Mutex(…

java培训分享:学习Java需要什么软件

在参加java培训过程中学习java技术&#xff0c;需要用到很多辅助工具&#xff0c;这些辅助工具是具有多功能性和实用性的&#xff0c;从代码构建到bug压缩。学习这些工具可以帮助您提高代码的质量&#xff0c;并成为一个更高效的Java开发人员。那么具体学习Java需要什么软件呢?…

J2SE基础夯实系列之数组

java中经常使用的是数组&#xff0c;前一段时间突然忘记了怎么定义char类型的二位数组&#xff1a; char[][] c {{},{},{A,B,C},{D,E,F},{G,H,I},{J,K,L},{M,N,O},{P,Q,R,S},{T,U,V},{W,X,Y,Z},};这个是char型的二维数组&#xff0c;思考一下&#xff0c;如果是定义String的二…

【组队学习】【24期】Datawhale组队学习内容介绍

第24期 Datawhale 组队学习活动马上就要开始啦&#xff01; 本次组队学习的内容为&#xff1a; 零基础入门语音识别&#xff08;食物声音识别&#xff09;Docker教程数据挖掘实践&#xff08;智慧海洋&#xff09;集成学习&#xff08;中&#xff09;河北邀请赛&#xff08;二…

centos5.6 (64bit)编译安装vsftpd-2.3.4的配置(两种用户登录)[连载之电子商务系统架构]...

centos5.6 (64bit)编译安装vsftpd-2.3.4的配置(两种用户登录)出处&#xff1a;http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy Li 作者&#xff1a;Jimmy Li关键词&#xff1a;电子商务&#xff0c;系统架构&#xff0c;vsftpd&#xff0c;本地用户登录&#xff0c;虚拟…

什么叫PMP?项目管理的本质是什么?

什么叫PMP?项目管理的本质是什么?相信有很多人现在对这个问题还不是非常了解&#xff0c;小编下面就为大家做下详细的介绍。 什么叫PMP?项目管理的本质是什么?什么叫PMP?PMP&#xff0c;中文全名是项目管理专业人士资格认证。 PMP是目前在项目管理这个领域认同度较高的一门…

基于C#的UDP协议的同步实现

一、摘要 总结基于C#的UDP协议的同步通信。 二、实验平台 Visual Studio 2010 三、实验原理 UDP传输协议同TCP传输协议的区别可查阅相关文档&#xff0c;此处不再赘述。 四、实例 4.1 采用socket实现UDP 由于UDP是一种无连接的协议。因此&#xff0c;为了使服务器应用能够发送和…

【直播】杨剑砺:数据可视化漫谈

数据可视化漫谈 目前 安泰第四届数据科学训练营 正在如火如荼的进行中。为了大家更好的学习&#xff0c;杨剑砺将为大家带来一场直播分享 —— 数据可视化漫谈。 直播信息 主讲人&#xff1a;杨剑砺&#xff0c;Datawhale成员&#xff0c;外企数据分析师。 直播时间&#xf…

service 与chkconfig

需要把启动脚本放到/etc/init.d/里面&#xff0c;还要加权限chmod x mysqld 本文转自flayber 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/406647516/1919335&#xff0c;如需转载请自行联系原作者

从事软件测试为什么要学自动化?

软件测试要学习的知识是有很多的&#xff0c;虽然听起来简单&#xff0c;但是细节知识还是很多的&#xff0c;尤其是软件测试自动化这块&#xff0c;那么就有人问了&#xff0c;从事软件测试为什么要学自动化?来看看下面的详细介绍就知道了。 从事软件测试为什么要学自动化?首…

【直播】黎佳佳:音频数据分析以及特征提取

音频数据分析以及特征提取 目前 Datawhale第24期组队学习 正在如火如荼的进行中。为了大家更好的学习“零基础入门语音识别&#xff08;食物声音识别&#xff09;”的课程设计者 黎佳佳&#xff0c;将为大家带来一场直播分享——音频数据分析以及特征提取。 直播信息 主讲人&…

电机相电压重构

利用svpwm的输出和当前的直流母线电压&#xff0c;计算出相电压参考TI文档phase_volt_calc.pdf注&#xff1a;该文章未考虑死区和管压降的影响 转载于:https://www.cnblogs.com/iable/archive/2012/08/08/4206882.html

ui设计的文字怎样提高设计感呢?

相信很多做UI设计师的小伙伴们&#xff0c;在工作的时候经常会遇到一些瓶颈&#xff0c;例如设计的构思&#xff0c;文字的改动都是让人头疼的事情&#xff0c;下面小编本期就为大家分享一个ui设计的文字怎样提高设计感。 UI设计培训分享&#xff1a;ui设计的文字怎样提高设计感…

SSL之CA证书颁发机构安装图文详解

上一节我们说到&#xff0c;在验证公钥安全性时&#xff0c;是在CA机构颁发的包含用户的公钥及其身份信息的数字证书,数字证书由权威机构——CA签发。这个CA权威机构可以是自己的服务器也可以是国际公认的CA权威机构。下面我就来讲一下CA证书颁发机构 如果你需要在组织里发布ex…