以下代码的用处?
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里面的话它得等到被请求时才会被编译, 稍微影响一点速度. 再有就是考虑到代码安全的问题.