.NET 4.0缓存功能对比谈 改进明显

开发 后端
本文将为大家用对比的方式,讨论一下.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. <system.runtime.caching>    
  2.  <memoryCache>    
  3.      <namedCaches>    
  4. <add name="Default" cacheMemoryLimitMegabytes="10"  pollingInterval="00:02:00"/>    
  5.     </namedCaches>    
  6.   </memoryCache>    
  7. </system.runtime.caching>   
  8.  

缓存过期策略与其它的缓存框架大同小异,与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的扩展。

原文标题:全面认识一下.NET 4.0的缓存功能

链接:http://www.cnblogs.com/hjf1223/archive/2010/07/16/net_4_caching.html

【编辑推荐】

  1. .NET分布式缓存之Memcached执行速度检测
  2. .NET缓存机制探讨与比对
  3. 概述ASP.NET缓存机制
  4. ASP.NET数据缓存之数据缓存浅谈
  5. ASP.NET数据缓存机制浅析
责任编辑:彭凡 来源: 博客园
相关推荐

2015-07-13 10:07:43

Java.NET

2009-08-17 09:30:28

.NET 4.0

2010-03-15 14:01:26

JavaScript

2009-09-04 16:28:05

ASP.NET 4.0

2010-02-03 15:11:53

C++内存区域

2010-09-14 13:10:36

2009-11-06 17:10:34

ChromeFirefox功能对比

2009-07-10 09:41:08

WCF服务配置.NET 4.0

2010-07-02 09:25:37

.NET 4.0可扩展

2010-01-06 19:18:22

.NET Framew

2009-03-16 12:10:02

Windows 7微软对比

2013-03-22 13:31:52

App制作工具非编程

2009-12-28 10:04:59

.NET 4.0数组

2010-04-26 13:48:17

iPhone OSiOSWindows Pho

2017-06-06 09:56:03

hypervisor成本功能

2009-11-24 15:49:48

.NET 4.0 Be

2009-04-07 08:55:08

Firefox火狐浏览器

2023-09-14 22:57:52

2009-02-20 08:51:22

.NET框架CLR组件

2012-07-18 10:41:35

语音功能
点赞
收藏

51CTO技术栈公众号