问题引出

HttpContext.Current.Cache .VS. HttpRuntime.Cache

  • HttpRuntime.Cache:获取当前应用程序的Cache
  • HttpContext.Current.Cache:为当前HTTP请求获取Cache对象,跨线程可用,在APM模式或创建了子线程的场景中不能用

HttpContext.Current.Cache 调用 HttpRuntime.Cache实现,两者指向同一 Cache对象:

  • HttpRuntime.Cache相当于是缓存具体实现类,非Web应用下也可以使用
  • HttpContext.Current.Cache是对缓存类的封装,局限HttpContext只能用于Web应用

在某些情况下,HttpContext还没被创建出来为null,就只能用 HttpRuntime.Cache。

  • 定时器的回调。
  • Cache的移除通知。
  • APM模式下异步完成回调。
  • 主动创建线程或者将任务交给线程池来执行

建议使用 HttpRuntime.Cache,既能减少出错,也减少一次函数调用。

eg:在获取程序\站点的根目录时尽量使用 System.Web.HttpRuntime.AppDomainAppPath。

其中,关于 APM模式 参见:https://www.cnblogs.com/mcgrady/p/5660314.html

HttpContext

限制:同一Http请求

Server.Transfer .VS. Response.Redirect

Server.Transfer 请求跳转页面,归属同一个http请求,URL无变化,所有操作均在服务器完成;Response.Redirect 则是重新发起新的页面请求,需要浏览器和服务器交互。

具体参见:HttpContext 初识

HttpContext.Current 由其维护

System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext

其中,CallContext.HostContext 表示:获取或设置与当前线程相关联的主机上下文 。

APM模式下的异步完成回调,访问HttpContext.Current方法:推荐第2种方法

  • 在类型中添加一个字段来保存HttpContext的引用(异步开始前)
  • 将HttpContext赋值给BeginXXX方法的最后一个参数(object state)

HttpRuntime

使用时建议自行封装,可参见:ASP.Net HttpRuntime.Cache 使用总结

获取或设置与当前线程相关联的主机上下文

HttpContext & HttpRuntime的更多相关文章

  1. System.Web.NullPointerException

    在.Net异步webApi中我们需要记录日志信息,需要获取客户端的ip地址,我们需要使用:HttpContext.Current.Request.ServerVariables["REMOT ...

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

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

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

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

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

    原文地址:http://blog.csdn.net/avon520/article/details/4872704 .NET中Cache有两种调用方式:HttpContext.Current.Cach ...

  5. [摘]HttpContext, HttpRequest, HttpResponse, HttpRuntime, HttpServerUtility

    [摘]http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html HttpRuntime HttpRuntime公开了一个静态方法 U ...

  6. HttpContext.Current.Cache 和 HttpRuntime.Cache

    HttpRuntime.Cache:用于winfrom 和 web HttpContext.Current.Cache 用于web .NET中Cache有两种调用方式:HttpContext.Curr ...

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

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/avon520/archive/2009/11/25/4872704.aspx .NET中Cache有两种调用方式:Ht ...

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

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

  9. Asp.Net framework 类库 自带的缓存 HttpRuntime.Cache HttpContext.Cache

    两个Cache 在.NET运用中经常用到缓存(Cache)对象.有HttpContext.Current.Cache以及HttpRuntime.Cache,HttpRuntime.Cache是应用程序 ...

随机推荐

  1. [译]使用Pandas读取大型Excel文件

    上周我参加了dataisbeautiful subreddit上的Dataviz Battle,我们不得不从TSA声明数据集创建可视化.我喜欢这种比赛,因为大多数时候你最终都会学习很多有用的东西. 这 ...

  2. matlab基本数据结构struct

    一起来学演化计算-matlab基本数据结构struct 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 http://blog.sina.com.cn/s/blog_46865140 ...

  3. k8s中正确删除一个pod

    1.先删除pod 2.再删除对应的deployment 否则只是删除pod是不管用的,还会看到pod,因为deployment.yaml文件中定义了副本数量 实例如下: 删除pod [root@tes ...

  4. HTML布局排版之制作个人网站的文章列表

    文章列表.博文列表,一般是有文章名字和时间构成的,文章名字后面是时间,点击文章的名字,可进入该文章.为了美观,一般文章名字都有一定的最大字数限制,长宽对齐,等长宽的统一格式比较美观,这种用表格来做比较 ...

  5. K8S - 容器编排工具Kubernetes简介

    1 - Kubernetes Kubernetes(简称K8s,用8代替8个字符"ubernete")是Google开源的一个容器编排引擎. 目前最为广泛且流行的容器编排调度系统, ...

  6. QT 源码分析--1

    Ref: http://blog.sina.com.cn/s/blog_6e80f1390100qoc0.html 安装qt之后(我使用的是online自动安装),安装目录下有\5.10.1\Src\ ...

  7. MacOS上使用Openconnect代替Cisco Anyconnect

    OpenConnect是一个Cisco Anyconnect的替代品,具有开源.易获取.可靠等优点.而官方版本的Cisco Anyconnect配置较为繁琐,需要在管理界面同时部署多平台客户端才能支持 ...

  8. C语言下进制的使用

    进制规则 十进制 以正常数字1-9开头,如123 八进制 以数字0开头,如0123 十六进制 以0x开头,如0X123 二进制 C语言不能直接书写二进制数 案例如下 int main() { int ...

  9. vm虚拟机啊安装操作

    VMware下载与安装一.虚拟机的下载1.进入VMware官网,点击左侧导航栏中的下载,再点击图中标记的Workstation Pro,如下图所示. 2.根据操作系统选择合适的产品,在这里以Windo ...

  10. 2019 牛客多校五 F. maximum clique 1 (最大团)

    大意: 给定$n$个互不相同的数, 若两个数异或后二进制中$1$的个数不少于$2$则连边, 求最大团. 最大团转为补图最大独立集. 可以发现补图是二分图, 所以直接$dinic$即可. 最大独立集相当 ...