IHttpHandler.IsReusable 属性

本文详细解析了IHttpHandler接口中IsReusable属性的作用、使用注意事项及影响性能的因素,帮助开发者更好地理解和应用这一特性,特别是在ASP.NET环境中。

以下代码的用处? 
public bool IsReusable {
        get {
            return false;
        }
    }

*****************************************
资料1:来自MSDN:
*****************************************
IHttpHandler.IsReusable 属性
获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。
属性值
如果 IHttpHandler 实例可再次使用,则为 true;否则为 false。 
 备注 
将 IsReusable 属性用所提供的重写 IsReusable 属性访问器 (getter) 的代码显式设置为 true 或 false。

*****************************************

资料2:
*****************************************

IHttpHandler接口中的属性 IsReusable

在MSDN上对IsReusable的介绍不够清楚。当该属性设置为true,将获得更好的执行性能,但是这在某些情况会引起一些 headcache的问题。
public bool IsReusable
{
 get { return false; }
}
这个属性用来指明,如果你IHttpHandler的实现类的单个实例被用来处理多个请求。当通过ASP.NET 管道处理时,每个客户端请求被服务端认为是一个工作者线程。因此,如果我们设置 IsReusable = true 时,我们需要确信ProcessRequest 方法是线程安全的。 ProcessRequest 应该不会依赖任何有可能被其他请求修改的状态值。当你的IHttpHandler 实现类忙于做初始化时,否则你无需介意IsReusable 返回的是true 或者 false。

*********************************************************
资料3:
*********************************************************
关于HttpHandler的可重用性的思考(关于IsReusable属性的疑惑)

原来一直对这个IHttpHandler的可重用性不太理解,今天看了一篇文章算是有一点感觉了. 总的说来针对每个请求都会由一个HttpHandlerFactory初始化一个对应的IHttpHandler的实例出来,  而这个Handler是否有状态并非取决于这个类是否有成员变量.  而是取决于它是否依赖于HttpContext.Request, 因为它被Factory初始化出来的时候是用这个context作为参数的,应该是这样理解吧.  当IsReusable 为真时, CLR会维护一个对象池, 通常是因为创建这个Handler需要较大的开销时才这么做, 同时它也应该是无状态的.

但是还是有一个问题, 就是IHttpHandler如果让它也支持象Aspx那样的输出缓存呢? 可能还需要继续研究.

那么怎么样的情况才可以重用这个handler 呢,这个就很明显了.  只要它不依赖于context.Request就可以.当然也不能有成员变量.

另外补充一下, 最好不使用.ashx文件,而直接在web.config接定相应的handler的类, 因为这些对更改handler来说更灵活一些,并且. 直接奖代码写在.ashx里面的话它得等到被请求时才会被编译, 稍微影响一点速度. 再有就是考虑到代码安全的问题.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值