IHttpHandler下的IsReusable属性
来源:互联网 发布:美国人工智能上市公司 编辑:程序博客网 时间:2024/06/07 19:01
简介
我们平时在开发的时候,经常做一些自定义的HttpHandler,每次再继承IHttpHandler接口的时候,都要设置IsReusable的值,通常我们都是设置返回true,可是我们要小心这个返回值,因为设置为true的时候有很多前提条件,其中最重要的2个是:
- 线程要安全
- 一个请求的HttpHandler实例下的状态或上下文信息不能被另外一个请求共享。
再深一点
MSDN对IsReusable的解释非常少:获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。
首先,IsReusable这个属性其实用来指明IHttpHandler实现类的实例是否可以被用来处理多个请求。当通过ASP.NET 管道处理时,每个客户端请求被服务端认为是一个工作者线程。因此,如果我们设置 IsReusable = true 时,我们需要确信ProcessRequest 方法是线程安全的。 ProcessRequest 应该不会依赖任何有可能被其他请求修改的状态值。当你的IHttpHandler实现类忙于做初始化时,否则你无需介意IsReusable 返回的是true 或者 false。
另外,由于HttpHandler实例是由HttpHandlerFactory来创建的,而HttpHandlerFactory创建HttpHandler实例的时候会将上下文信息HttpContext作为参数传进去,如果多个工作者线程共享这个实例的话,那就不能都依赖HttpContext.Request内容,因为依赖了,那各个请求就乱了,比如你通过一个Request参数设置Httphandler的一个属性值,然后其他线程在调用的时候就有可能用到这个值,(但是可以利用Request参数去分别处理自己的逻辑,只要不共享就行),再比如我们如果在做多用户信息的时候,如果一个用户能管理另外一个用户的资源的话,那就有问题了。
微软之所以暴露这个属性给我们,因为创建HttpHandler的开销比较大,当IsReusable 为真时, CLR会维护一个对象池,进去重用,但同时它也应该是无状态的。
总结
所以说在设置IsReusable为true的时候,一定要保证线程安全,并且不依赖Request项,当然也不应该有成员变量,因为成员变量在同一个实例下是随意可用的。
另外还有一点是,尽量不要使用.ashx文件格式,因为它是在第一期请求的时候才编译,速度自然没有预先编译快了,所以建议在web.config里直接指定所对应的HttpHandler。
- IHttpHandler下的IsReusable属性
- 小心使用IHttpHandler下的IsReusable属性
- 小心使用IHttpHandler下的IsReusable属性
- 小心使用IHttpHandler下的IsReusable属性
- 小心使用IHttpHandler下的IsReusable属性
- IHttpHandler.IsReusable 属性
- net2003转到net2005碰到的一个问题:不会实现接口成员“System.Web.IHttpHandler.IsReusable”
- IsReusable
- 关于HttpHandler的可重用性的思考(关于IsReusable属性的疑惑)
- asp.net vs2008 不实现接口成员System.Web.IHttpHandler.IsReusable
- ASP.NET一般处理文件Handler.ashx属性IsReusable详解
- ASP.NET一般处理文件Handler.ashx属性IsReusable详解
- 学习IHttpHandler的使用 。
- IHttpHandler
- IHttpHandler
- IHttpModule与IHttpHandler的区别
- 利用IHttpHandler计算页面的执行时间
- 利用IHttpHandler计算页面的执行时间
- work_weipa_TextView限制字数
- 通过 ActiveMQ 演示如何使用 JMS API
- Android Fragment 基本介绍
- 黑马程序员_Java 高新技术(1)
- Linux上安装JDK
- IHttpHandler下的IsReusable属性
- iOS笔记--如何获取当前设备信息
- mysql数据库安装(WIN7)
- 黑马程序员—反射
- jQuery中的Ajax几种请求方法
- Oracle 使用RMAN COPY 移动 整个数据库 位置
- 解决R.java无法自动生成
- 面试实现智能指针
- java可视化编程-eclipse安装windowbuilder插件(转载)