在ASP.NET中有两个类都提供缓存支持, 一个是HttpRuntime类的Cache属性, 另一个是HttpContext类的Cache属性. 通过查看这两个属性的类型可以发现其实这两个属性都是System.Web.Caching.Cache类的实例.那为什么需要同时提供两种支持呢? 查询MSDN后发先,这两个缓存的应用的场景不一样, HttpRuntime.Cache是应用程序级别的缓存, HttpContext.Current.Cache是针对Web上下文定义的, 是一个局部的缓存.(这段话需要进一步求证)

缓存的作用
ASP.NET是一种动态页面技术,用ASP.NET技术做出来的网页几乎都是动态的,所谓动态是指:页面的内容会随着不同的用户或者持续更新的数据, 而呈现出不同的显示结果。既然是动态的,那么这些动态的内容是从哪里来的呢?我想绝大多数网站都有自己的数据源, 程序通过访问数据源(如数据库系统, 文件系统)获取页面所需的数据,然后根据一些业务规则的计算处理,最后变成适合页面展示的内容。

由于这种动态页面技术通常需要从数据源获取数据,并经过一些计算逻辑,最终变成一些HTML代码发给客户端显示。而这些计算过程显然也是有成本的。 这些处理成本最直接可表现为影响服务器的响应速度,尤其是当数据的处理过程变得复杂以及访问量变大时,会变得比较明显。 另一方面,有些数据并非时刻在发生变化,如果我们可以将一些变化不频繁的数据的最终计算结果(包括页面输出)缓存起来, 就可以非常明显地提升程序的性能,缓存的最常见且最重要的用途就体现在这个方面。 这也是为什么一说到性能优化时,一般都将缓存摆在第一位的原因。 我今天要说到的ASP.NET Cache也是可以实现这种缓存的一种技术。 不过,它还有其它的一些功能,有些是其它缓存技术所没有的。

缓存的用法
创建缓存和读取缓存, 这是缓存的基本用法. 读取缓存通过Cache.Get(key) 或 Cache[key], 而创建缓存的方式有两种Add和Insert, 这两种方式的差别在与: 当要创建的缓存已经存在时, Insert会覆盖原有的缓存项, 而Add不会.

缓存的过期时间
ASP.NET支持二种缓存项的过期策略:绝对过期和滑动过期。

1. 绝对过期,这个容易理解:就是在缓存放入Cache时,指定一个具体的时间。当时间到达指定的时间的时,缓存项自动从Cache中移除。
2. 滑动过期:某些缓存项,我们可能只希望在有用户在访问时,就尽量保留在缓存中,只有当一段时间内用户不再访问该缓存项时,才移除它, 这样可以优化内存的使用,因为这种策略可以保证缓存的内容都是【很热门】的。 操作系统的内存以及磁盘的缓存不都是这样设计的吗?而这一非常有用的特性,Cache也为我们准备好了,只要在将缓存项放入缓存时, 指定一个滑动过期时间就可以实现了。

以上二个选项分别对应Add, Insert方法中的DateTime absoluteExpiration, TimeSpan slidingExpiration这二个参数。
注意:这二个参数都是成对使用的,但不能同时设置它们,最多只能一个参数值有效。也就是当设置absoluteExpiration时, slidingExpiration就必须设置为NoSlidingExpiration,  而当设置slidingExpiration时,absoluteExpiration必须设置为NoAbsoluteExpiration

缓存依赖项
缓存对象中的项可以与文件、缓存键、文件或缓存键的数组或另一个 CacheDependency 对象之间建立依附性关系。 CacheDependency 类监视依附性关系,以便在任何这些对象更改时,自动移除该缓存项。

参考资料
http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html

Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache相关推荐

  1. HttpContext.Current.Cache 过期时间

    HttpContext.Current.Cache 过期时间 原文:HttpContext.Current.Cache 过期时间 为了更快的读取数据,我们一般会把常用到的数据加载到Cache中 在.N ...

  2. HttpContext.Current.Cache vs. HttpRuntime.Cache

    .NET中Cache有两种调用方式:HttpContext.Current.Cache 和 HttpRuntime.Cache,这两种方式有什么区别呢?我们先看MSDN上的解释:       Http ...

  3. HttpContext.Current.Cache和HttpRuntime.Cache的区别,以及System.Runtime.Caching

    先看MSDN上的解释:       HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.       HttpRuntime.Cache:获取当前应用程序的C ...

  4. 缓存通用管理类 + 缓存 HttpContext.Current.Cache 和 HttpRuntime.Cache 的区别

    以前写asp.net时用HttpContext.Current.Cache存缓存很好用,今天写了一个windows服务程序,HttpContext.Current.Cache存缓存的时候还好,取的时候 ...

  5. HttpContext.Current.Cache在控制台下不工作

    说明: Cache 类不能在 ASP.NET 应用程序外使用.它是为在 ASP.NET 中用于为 Web 应用程序提供缓存而设计和测试的.在其他类型的应用程序(如控制台应用程序或 Windows 窗体 ...

  6. 在ASP.NET 中实现单用户登录(利用Cache, 将用户信息保存在服务器缓存中)[转]

    Technorati 标签: asp.net,cache 由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录.在ASP.NET中实现单点登录其实很简单,下 ...

  7. Asp.Net中Cache操作类

    /// <head>///<function>/// 存储类(存储UserInfo信息)///</function>///<description>// ...

  8. 在ASP.NET 中实现单点登录

    出自:[孟宪会之精彩世界] 发布日期:2005年1月27日 8点48分0秒 [有删改] 由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录.在ASP.NE ...

  9. UrlRewrite(URL重写)--ASP.NET中的实现

    概述 今天看了下URL重写的实现,主要看的是MS 的URL Rewrite. URL重写的优点有:更友好的URL,支持老版本的URL URL重写的缺点有:最主要的缺点是性能低下,因为如果要支持无后缀的 ...

最新文章

  1. 处理错误:ORA-27101: shared memory realm does not exist 解决方案
  2. Flex 中取得当前服务IP地址
  3. android代码记录日期,Android日期和时间选择器实现代码
  4. C++指针和数组的区别(不能混用的情况)
  5. JVM 对象引用标记 与 内存回收算法
  6. 人脸验证(五)--NormFace
  7. OPEN SQL中通配符的使用
  8. J2SE5 中的最新注释功能SuppressWarnings(转)
  9. .NET银联支付开发(一):支付
  10. 零基础新手应该如何学习平面设计
  11. python 字符编码识别及转换
  12. python 数组去重的方法
  13. 使用R制作世界热力地图
  14. 联想G40-30安装win7
  15. Addressable设置的要点
  16. Leap Motion 之Unity 开发实战(一. 制作手的HandController)
  17. Windows安装配置Oracle
  18. Quia maxime eius ipsa.
  19. 如何做好任务管理,手把手教你怎么做最高效的任务管理
  20. 多媒体技术知识点(含有真题)

热门文章

  1. css3属性box-sizing:border-box 用法解析 击败边框:带border的百分比布局
  2. ai不同形状的拼版插件_PCBA加工条件的讲解以及它和PCB的不同
  3. java线程 教程_Java多线程系列教程
  4. 国家智能计算机研究开发中心 地址,油藏数值模拟-国家智能计算机研究开发中心.PDF...
  5. 使用Asible连接被控端SHH拒绝解决办法
  6. android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)
  7. 单片机 c语言 按键长按短按,求助:单片机一键长按与短按按键实现的c程序有问题...
  8. pc 页面在移动端怎么获取放大倍数、_百度移动搜索开放适配服务的3种方法
  9. Pycharm安装和基本使用
  10. springcloud系列四 搭建服务模块重点讲解