HttpRuntime.Cache与HttpContext.Current.Cache

从MSDN上的解释可以看出,HttpRuntime.Cache是应用程序级别的,而HttpContext.Current.Cache是针对当前WEB上下文定义的。
然而,实际上,这二个都是调用的同一个对象,不同的是:HttpRuntime下的除了WEB中可以使用外,非WEB程序也可以使用。
而HttpContext则只能用在WEB中

插入:
System.Web.HttpContext.Current.Cache.Insert("AuthorizeCode", code, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);
HttpRuntime.Cache.Insert("AuthorizeCode", code, null, DateTime.Now.AddMinutes(5), TimeSpan.Zero);

获取:
System.Web.HttpContext.Current.Cache.Get("AuthorizeCode")
HttpRuntime.Cache.Get("AuthorizeCode")

移除:
System.Web.HttpContext.Current.Cache.Remove("AuthorizeCode");
HttpRuntime.Cache.Remove("AuthorizeCode");

Add与Insert的不同
HttpRuntime.Cache.Add 存在相同的键会异常,返回缓存成功的对象。
HttpRuntime.Cache.Insert存在相同的键会替换原值,无返回值。
如果您希望某个缓存项目一旦放入缓存后,就不要再被修改,那么调用Add确实可以防止后来的修改操作。而调用Insert方法,则永远会覆盖已存在项。

HttpContext其实是保存在CallContext.HostContext这个属性中
HttpContext并非无处不在!
CallContext.HostContext:获取或设置与当前线程相关联的主机上下文

【当前线程】是个什么意思?
答:
1. 当前线程是指与【当前请求】相关的线程。
2. 在ASP.NET中,有些线程并非总是与请求相关。
感觉有点绕口吗? 不容易理解吗? 还是继续往下看吧。
虽然在ASP.NET程序中,几乎所有的线程都应该是为响应请求而运行的,
但是,还有一些线程却不是为了响应请求而运行,例如:
1. 定时器的回调。
2. Cache的移除通知。
3. APM模式下异步完成回调。
4. 主动创建线程或者将任务交给线程池来执行。

时间: 2024-12-11 21:29:32

HttpRuntime.Cache与HttpContext.Current.Cache的相关文章

Cache及(HttpRuntime.Cache与HttpContext.Current.Cache)

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/avon520/archive/2009/11/25/4872704.aspx .NET中Cache有两种调用方式:HttpContext.Current.Cache 和 HttpRuntime.Cache,这两种方式有什么区别呢?我们先看MSDN上的解释:      HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.      HttpRuntime.Cache:获取当前

.Net Cache及(HttpRuntime.Cache与HttpContext.Current.Cache的区别)

因为程序中用到 在当前会话上下文中缓存多个数据库的需求,所有查了下资料. 我们在.NET运用中经常用到缓存(Cache)对象.除了System.Web.Caching下的Cache外,我们还可以用到HttpContext.Current.Cache以及HttpRuntime.Cache那么,HttpContext.Current.Cache以及HttpRuntime.Cache有什么区别呢?从MSDN上的解释可以看出,HttpRuntime.Cache是应用程序级别的,而HttpContext.

Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache

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

缓存 HttpContext.Current.Cache和HttpRuntime.Cache的区别

先看MSDN上的解释:HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.HttpRuntime.Cache:获取当前应用程序的Cache. 我们再用.NET Reflector工具看看HttpContext.Cache和HttpRuntime.Cache的实现://HttpContext.Cache和HttpRuntime.Cache实现    //System.Web.HttpContext.Cache属性实现    public sealed cl

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

先看MSDN上的解释:      HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.      HttpRuntime.Cache:获取当前应用程序的Cache.       我们再用.NET Reflector工具看看HttpContext.Cache和HttpRuntime.Cache的实现: HttpContext.Cache和HttpRuntime.Cache实现    //System.Web.HttpContext.Cache属性实现   

HttpContext.Current.Cache 和HttpRuntime.Cache的区别

先看MSDN上的解释:      HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.      HttpRuntime.Cache:获取当前应用程序的Cache.       我们再用.NET Reflector工具看看HttpContext.Cache和HttpRuntime.Cache的实现: HttpContext.Cache和HttpRuntime.Cache实现    //System.Web.HttpContext.Cache属性实现   

HttpContext.Current.Cache 过期时间

原文:HttpContext.Current.Cache 过期时间 为了更快的读取数据,我们一般会把常用到的数据加载到Cache中 在.NET中,Cache的存在可以依赖多中方式,主要用到HttpContext.Current.Cache类 在这里,我主要写几种依赖方式 1:不依赖任何条件 HttpContext.Current.Cache.Insert(string cacheName,object obj) 理论上是Cache会永久保存,但是当服务器重新启动,内存紧张的时候也会丢失. 2:H

多线程下使用HttpContext.Current.Cache.Get(key) 获取缓存时抛出null错误

解决办法如下: 1 /// <summary> 2 /// 获取缓存对象 3 /// </summary> 4 /// <param name="key">缓存Key</param> 5 /// <returns>object对象</returns> 6 public static object Get(string key) 7 { 8 if (string.IsNullOrEmpty(key)) 9 { 10

HttpContext.Current.Cache使用文件依赖问题

HttpContext.Current.Cache.Insert("FCacheMs", tb, New CacheDependency(HttpContext.Current.Server.MapPath("~/CacheMs.txt"))) 当CacheMs.txt文件发生变化后,过一秒后程序马上请求这个Cache,发现它不会更新,估计系统修改文件属性要一定的时间.