System.Web.HttpContext.Current.Cache和System.Web.HttpRuntime.Cache有什么区别?

ASP.NET五大核心对象:HttpRuntime、HttpContext、HttpRequest、HttpResponse、HttpServerUtility深度解析 HTTP服务器开发的核心范式围绕请求(Request)、响应(Response)和上下文(Context)三大抽象展开,这是Java Servlet、Node.js Express、Python Flask与ASP.NET共通的基础模型。在ASP.NET中,HttpRuntime作为运行时调度中枢,HttpContext承载单次请求全生命周期状态,HttpRequest与HttpResponse分别实现协议解码与输出组装,HttpServerUtility则提供HtmlEncode、UrlEncode等安全 阅读详情

来自:http://www.cnblogs.com/qiantuwuliang/archive/2009/12/28/1634571.html

 System.Web.HttpContext.Current.Cache 属性 ----->是个"属性值"

System.Web.HttpRuntime.Cache 属性--------------->是个"属性值"

System.Web.Caching.Cache webCache=***-------->是个"类"

比如: protected static volatile System.Web.Caching.Cache webCache = System.Web.HttpRuntime.Cache;

==================================================

Asp.Net中可以方便的使用缓存,对于Cache,一般有两种方式调用:HttpContext.Cache和HttpRuntime.Cache。那么这两种Cache有什么区别呢?

先来看看Msdn上的注释:
HttpRuntime.Cache:获取当前应用程序的 Cache。
HttpContext.Current.Cache:为当前 HTTP 请求获取 Cache 对象。

那么是不是说对于HttpRuntime.Cache就是应用程序级,而HttpContext.Cache则是针对每个用户的呢?NO,而实际上,两者调用的是同一个对象。他们的区别仅仅在于调用方式不一样(就我所知)。

事实胜过雄辩,写个例子来证实一下(限于篇幅仅贴出关键代码,完整代码见附件WebDemo.rar):

 

代码 

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  /**//// <summary>
        /// 通过HttpRuntime.Cache的方式来保存Cache
        /// </summary>
        private void btnHttpRuntimeCacheSave_Click(object sender, System.EventArgs e)
        {
            HttpRuntime.Cache.Insert(cacheKey, cacheValue, null, DateTime.Now.AddMinutes(3), TimeSpan.Zero);
        }

        /**//// <summary>
        /// 通过HttpRuntime.Cache的方式来读取Cache
        /// </summary>
        private void btnHttpRuntimeCacheLoad_Click(object sender, System.EventArgs e)
        {
            if (HttpRuntime.Cache[cacheKey] == null)
            {
                cacheContent = "No Cache";
            }
            else
            {
                cacheContent = (string)HttpRuntime.Cache[cacheKey];
            }
            lblCacheContent.Text = cacheContent;
        }

        /**//// <summary>
        /// 通过HttpContext.Cache的方式来保存Cache
        /// </summary>
        private void btnHttpContextCacheSave_Click(object sender, System.EventArgs e)
        {
            HttpContext.Current.Cache.Insert(cacheKey, cacheValue, null, DateTime.Now.AddMinutes(3), TimeSpan.Zero);
        }

        /**//// <summary>
        /// 通过HttpContext.Cache的方式来读取Cache
        /// </summary>
        private void btnHttpContextCacheLoad_Click(object sender, System.EventArgs e)
        {
            if (HttpContext.Current.Cache[cacheKey] == null)
            {
                cacheContent = "No Cache";
            }
            else
            {
                cacheContent = (string)HttpContext.Current.Cache[cacheKey];
            }
            lblCacheContent.Text = cacheContent;
        }


 

通过这个例子可以很容易证明:

  1. HttpContext.Current.Cache保存的Cache,HttpContext.Current.Cache和HttpRuntime.Cache都可以读取。
  2. HttpRuntime.Cache保存的Cache,HttpContext.Current.Cache和HttpRuntime.Cache都可以读取。
  3. 无论是哪个用户通过什么方式对Cache的改变,其他用户无论用什么方式读取的Cache内容也会随之变。

转自:http://blog.joycode.com/dotey/archive/2005/01/15/43091.aspx

留言反馈:

===================================================

1、HttpRuntime.Cache 相当于就是一个缓存具体实现类,这个类虽然被放在了 System.Web 命名空间下了。但是非 Web 应用也是可以拿来用的。
2、HttpContext.Current.Cache 是对上述缓存类的封装,由于封装到了 HttpContext ,局限于只能在知道 HttpContext 下使用,即只能用于 Web 应用。

===================================================

这个测试等于废话!

还是这句话说得对!

在HttpContext里定义cache只是为了使用方便。在某些情况下,HttpContext还没被创建出来,就只能用HttpRuntime.Cache。

===================================================

已经有人说过这个话题,相关链接: HttpRuntime.Cache vs. HttpContext.Current.Cache
http://weblogs.asp.net/pjohnson/archive/2006/02/06/437559.aspx

===================================================

好像搂主说的不对。你的Demo代码无法下载,我也无法验证。

先来看看Msdn上的注释:
HttpRuntime.Cache:获取当前应用程序的 Cache。
HttpContext.Cache:为当前 HTTP 请求获取 Cache 对象。

Msdn上的注释 是对的。

我自己测试过,如果使用不同的Session访问HttpContext.Current.Cache,结果不一样;但是HttpRuntime.Cache 是一样的。

===================================================

两个东西调用的对象确实是同一个,这个估计是为了方便调用的,但是HttpRuntime.Cache在Web程序里是去对能调用的,而HttpContext.Cache就不一定了,因为.net不是请求级别的程序,有些代码是在HttpContext.Current为空的情况下执行,这个时候就只能用HttpRuntime.Cache了

===================================================

两个Cache是一样的,只是同一个Cache的读取方法放在不同类中一样
就好像Page.Request 和Context.Request一样
我觉得Cache是Application的增强版,因为它除了具有Application的功能外,还有时间处理,关联等方法的集成

===================================================

一个应用程序如何调用另外一个应用程序的Cache?

在另一个应用程序中创建一个WebService.
通过调用该Service可以获得Cache.

===================================================

是啊,在Global.asax里面调用HttpContext.Cache是取不到东西的。这个也费了我半天才查出来,到最后不得不在Global类里加了个静态变量。

===================================================

多数浏览器和控制项装置的URL 长度限制为255 个字符 ,最多也就1K。

===================================================

session好用,但是依赖浏览器。

默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。

URL的长度是有限制的。

===================================================

System.Web.HttpContext:

public Cache get_Cache()
{
return HttpRuntime.Cache;
}

...

在HttpContext里定义cache只是为了使用方便。在某些情况下,HttpContext还没被创建出来,就只能用HttpRuntime.Cache。

@abin

“假设一下:如果一个论坛为应用登录用户缓存一些设置,如果没有设置缓存截止的时间,那么它占用的内存会一直变大…… ”

那些东西最好存session。developer要对自己写的代码负责,如果想troubleshooting memory leak,欢迎联系Microsoft Product Support Service..经常看到有人在cache里放几百m的dataset..

@lone

“一个应用程序如何调用另外一个应用程序的Cache? ”

impossible,除非你用caching application block..

===================================================

HttpRuntime.Cache 还可用于自定义类访问Cachem,今天为了解决这个问题花了好多时间

===================================================

一台服务器上可不是一个Web Appliction

===================================================

个人看法:相对于现在的服务器内存来说,缓存占用的内存并不算多,最重要看你是怎么用的。

===================================================

在MSDN上查了,这两个Cache都属于
System.Web.Caching.Cache。
结果自然就一样了。


但我有一点不明白,为什么要弄成一样呢,而且还是全局的,这样如果不设置缓存时间的话所有的变量都会存起来,直到运用程序被重新启动。
假设一下:如果一个论坛为应用登录用户缓存一些设置,如果没有设置缓存截止的时间,那么它占用的内存会一直变大……

看了要好好设置一下缓存时间和偏移量。

===================================================

......

===================================================


 
ASP.NET Cache深度实战:进程内缓存的工程价值与生产级优化 进程内缓存是Web应用性能优化的基础能力,其核心在于低延迟、零依赖、轻量可控。ASP.NET Cache作为.NET Framework原生实现,虽被标记为过时,却仍具备文件依赖、数据库变更自动失效(SqlCacheDependency)、回调通知及优先级回收等独特机制,在离线系统、政企遗留改造、毫秒级响应场景中不可替代。本文聚焦真实医保平台案例,解析缓存键设计、内存安全控制、高并发原子写入、错峰过期防雪崩等关键技术,结合CacheItemPriority策略与SqlCacheDependency实践,揭示 阅读详情

相关推荐

使用 Restart Extension 继续解决 Ansys 机械分析

您正在执行复杂或大型的多步有限元分析,突然,您意识到经过数小时的求解后,您需要添加或修改边界条件。在本篇博文中,您将了解如何利用 Ansys Mechanical 中的 RestartAnalysis 扩展来扩展多步分析,方法是合并额外的时间步骤和边界条件,而不会丢失已计算的结果。幸运的是,在 Mechanical 中,有一种直接的方法可以实现这一点,而不会损害您之前的结果,而这在添加新边界条件和使用重新启动点时经常发生。得到的结果符合预期,您可以看到施加的力产生的这两个部分之间的相对位移。

jkh920184196的博客 1232

【原】缓存之 HttpRuntime.Cache

1、HttpRuntime.Cache HttpRuntime.Cache 相当于就是一个缓存具体实现类,这个类虽然被放在了 System.Web 命名空间下了。但是非 Web 应用也是可以拿来用的。 HttpContext.Cache 是对上述缓存类的封装,由于封装到了 HttpContext ,局限于只能在知道 HttpContext 下使用,即只能用于 Web 应用。 2、.绝...

weixin_30575309的博客 557

别再让地图加载慢吞吞!GeoServer + GeoWebCache 缓存配置实战(附性能对比)

本文详细介绍了如何通过GeoServer和GeoWebCache优化地图服务性能,实现地图加载速度的显著提升。从缓存机制解析到实战配置流程,再到高级性能调优技巧,帮助开发者构建高效地图缓存系统,解决地图加载慢的问题。

weixin_42525369的博客 407

HttpRuntime.Cache用法

上一篇写了Asp.net页面缓存,本篇介绍在服务器端进行缓存。微软.net给我提供了HttpRuntime.Cache对象进行缓存。个人对缓存的理解是,将从数据库、文件、或业务逻辑计算出来的数据,保存在内存中,当下一次遇到相同内容的请求就直接将保存在内存中的数据返回给请求者。这样做的好处是可以提高访问效率,减少文件或是数据库的读取,属于"以空间换时间",适当的运用好Cache可以很大程度提高程序性

风雨无阻,执着追求!!! 4867

51单片机——LCD12864驱动函数深度解析与实战优化

本文深入解析了51单片机驱动LCD12864液晶屏的核心驱动函数,从底层时序、关键延时到地址计算进行逐行剖析,并针对常见显示问题提供系统性的调试技巧与实战优化方案。重点探讨了如何将基础代码优化为稳定高效的驱动,涵盖延时精准化、批量写入及显示缓冲区等高级技巧,旨在帮助开发者从“点亮”屏幕进阶到“精通”驱动,确保显示稳定可靠。

weixin_29190169的博客 85

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

【.NET Core】你真的了解HttpRuntime类吗

C# HttpRuntime是一个ASP.NET应用程序的核心类之一,它提供了一些有用的方法和属性,可以让ASP.NET应用程序中处理HTTP请求和响应。获取当前请求的HttpContext对象获取应用程序的虚拟地址获取应用程序的物理路径获取应用程序的配置信息获取应用程序的缓存启动应用程序的会话状态调用Web服务类在使用HttpRuntime类之前,需要先确保在ASP.NET应用程序中已经引用了System.Web命名空间。

记录总结工作过往 2284

麒麟操作系统安装达梦数据库ARM版

Linux安装达梦数据库ARM版

运维@小兵的博客 8769

HttpRuntime.Cache 缓存

说起缓存,我们首先想的是以空间(内存)换取时间为代价来改善程序性能。下面先说下缓存的有效期的使用 使用情况 1:数据频繁使用 2:访问量不高但是存在周期长 3:缓存数据不是很大,毕竟cache用得过多会增大服务器的压力。 基本语法 add:再次调用不会修改原先的缓存项。 Insert:覆盖原有的缓存项。 Get:获取缓存项的值 Count:获取存储在缓存中的项数 Effecti...

u011791378的专栏 1440

库存管理系统项目部署方案(基于jdk8)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 2574

2026软考中级-软件设计师笔记(送最新视频教程)

核心口诀:运控存输输(运算器、控制器、存储器、输入、输出)例题(2019年上半年):核心公式:数字签名流程:数字证书作用:死锁4个必要条件:死锁判断公式:处理策略:程序设计语言的四大核心成分:顺序表操作(时间复杂度):链表操作(时间复杂度):核心思想:频率高的字符用短编码,频率低的用长编码 → 最小化总编码长度构造步骤(贪心算法):前提:有序表(升序/降序) 步骤:时间复杂度:O(log₂n) 例:查找中核心思想:用哈希函数将关键字映射到存储位置 哈希冲突:不同关键字映射到同一位置 → 用链地址法或开放定址

36万+

关于WinForm/Web如何使用缓存Cach

Cache 的绝对到期与滑动到期 绝对到期:设置绝对过期时间 到了指定时间以后会失效。(类似Cookie机制) 相对到期也称滑动到期:设置相对过期时间 指定时间内无访问会失效。(类似Session机制) HttpRuntime.Cache与HttpContext.Current.Cache 为同一个对象HttpRuntime.Cache.Add 存在相同的键会异常,返回缓存成功的...

weixin_30265171的博客 318

麻辣香锅病毒分析

Spicy Hot Pot浏览器劫持病毒(麻辣香锅病毒)从2020年初被安全公司监测到,因其病毒模块带有MLXG_KM被安全行业代称麻辣香锅病毒。目前通过各种激活工具传播, 包括暴风激活、小马激活和KMS激活等诸多工具,疑似与下载站进行合作推广此类激活工具。Spicy Hot Pot 是一个浏览器劫持 Rootkit,它会将用户的主页更改为指向恶意软件操作员控制的页面,此外还会将内存转储从机器上传到预定义的服务器,并结合本地更新功能以确保其保持更新。通常浏览器劫持者会通过更改用户主页的恶意可执行文件或注册表

不忘初心,护天下安全! 4788

SAP物料主数据表结构全解析:从MARA到MARC的底表映射与ABAP开发实践

在ERP系统实施与二次开发中,物料主数据是供应链、财务与生产模块的基石,但许多ABAP开发人员面对MM03界面与后台底表时,常常因数据分散而困惑。理解物料主数据的存储逻辑,首先要掌握SAP按组织级别和视图拆分的表设计原则:通用数据存于MARA,多语言描述存于MAKT,工厂级参数存于MARC,库存数量存于MARD,评估价格存于MBEW。这种设计虽提升了灵活性,却增加了取数与维护的复杂度。对于企业来说,无论是日常报表开发、字段溯源,还是通过附加结构或BADI扩展业务字段,快速定位底表并理清关联关系都是高效交付的

weixin_33834910的博客 279

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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和HttpRunti...

weixin_33924770的博客 215

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

Cache及(HttpRuntime.Cache与HttpContext.Current.Cache) 我们在.NET运用中经常用到缓存(Cache)对象。 除了System.Web.Caching下的Cache外,我们还可以用到HttpContext.Current.Cache以及HttpRuntime.Cache 那么,HttpContext.Current.Cache以

yongyinmg的专栏 6146

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

求解HttpRuntime.Cache偶尔缓存丢失的问题

当用户登入的时候,我把该用户的权限放到缓存中(用的是HttpRuntime.Cache),用户的每次操作都会验证权限。现在的问题是,在验证权限的方法中,我会先判断一下是否存在了权限cache,如果不存在,则处理之;存在,则继续判断是否有执行操作的权限。Cache cache = HttpRuntime.Cache;  List rule = bllAction.GetRoleActionName

冰的城 9932

C#笔记(持续更新)

日期时间格式化 DateTime SubmitTime = Convert.ToDateTime(Dt_HandContent.Rows[0]["SubmitTime"].ToString()); string formatTime= string.Format("{0}年{1}月{2}日{3}:{4}", SubmitTime.Year, SubmitTime.Month, SubmitTime.Day, SubmitTime.Hour, SubmitTime.Mi

weixin_44380589的博客 259

深入IIS与ASP.NET管道:从HTTP协议到HttpContext的底层原理

HTTP协议是无状态的通信契约,其设计本质在于将状态管理权交还应用层;IIS架构演进(如集成模式)并非简单升级,而是Web服务器控制权向.NET运行时的系统性移交;AppDomain曾是.NET实现故障隔离的核心机制,其思想在.NET Core中由AssemblyLoadContext继承并轻量化。理解这些基础概念,是掌握现代Web开发底层逻辑的前提——它支撑着从传统IIS托管、.NET Framework管道事件调试,到.NET 6 Minimal Hosting模型迁移的全链路技术决策。本文聚焦HTTP

aobai7842的博客 390

System.Web.Caching.Cache类 Asp.Net缓存 各种缓存依赖

Cache类,是一个用于缓存常用信息的类。HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例。 一、属性 属性 说明 Count 获取存储在缓存中的项数。 EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百

笔记本~ 3833

System.Web.Caching.Cache类 缓存 各种缓存依赖

  Cache类,是一个用于缓存常用信息的类。HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例。 一、属性 属性 说明 Count 获取存储在缓存中的项数。 EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物...

weixin_33856370的博客 88

web中缓存的使用(.Net)

很多人都知道什么叫缓存,甚至学习过,但用起来还真难用。我经过几天的学习cache想跟大家分享和讨论。 我是带着疑问去学习的。缓存是用在什么地方,有什么好处。 缓存就是 把获取的数据暂时存到内存中,当获取的数据没有变化时就还是用内存里的东西。评论中有人说缓存可用文件,数据库存。这个我同意,但一般编程都用微软中 system.web.caching.cache 类,它是在把数据放在内存中。可能有人

天外有天,人外有人。 专注品质 不断创新 让精益求精成为习惯 767

HTTP协议与IIS底层原理:Web开发者的地基课

HTTP协议是Web通信的基石,其无状态设计、请求响应模型及头部机制深刻影响着性能、安全与兼容性;IIS作为Windows平台主流Web服务器,依托HTTP.SYS内核驱动、应用程序池隔离与集成管道模式,构建了高可靠托管运行环境。理解HTTP报文解析、TCP连接复用策略、Cookie生命周期、P3P隐私头演进,以及IIS中经典/集成模式差异、AppDomain隔离机制和ASP.NET请求管道19个执行步骤,不仅能精准定位503/500错误、静态资源授权失效、Session丢失等典型问题,更能为.NET Fr

dingguayi7025的博客 442
上一篇: ASP.NET数据缓存四大方案
下一篇: 缓存依赖、数据库缓存依赖学习以及在LinQ当中使用缓存依赖
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值