bool IsReusable在http处理程序接口中的意义

时间:2009-02-11 23:14:17

标签: asp.net httphandler ihttphandler

编写http处理程序/模块时,有一个要实现的接口成员 - bool IsReusable

这位会员有什么意义?如果我将其设置为false(或true),这对于其他Web应用程序意味着什么?

3 个答案:

答案 0 :(得分:149)

处理程序的正常入口点是ProcessRequest方法。但是,您可能在类构造函数中包含了一些代码,这些代码将一些构建成本很高的实例值放在一起。

如果指定Reusable为true,则应用程序可以缓存实例并通过一次又一次地调用其ProcessRequest方法在另一个请求中重用它,而不必每次都重新构建它。

应用程序将实例化处理当前负载所需的许多处理程序。

缺点是如果所需的实例数大于当前存在的实例数,则会导致使用更多内存。相反,它们也可以减少表观内存使用量,因为它们的实例值将在GC周期中存活,并且不需要经常重新分配。

另一个需要注意的是,您需要确保在ProcessRequest执行结束时,对象状态与您希望另一个请求重用该对象一样。

答案 1 :(得分:46)

继AnthonyWJones的回答之后,如果你的HTTP处理程序为true返回IsReusable,那么你应该确保它是完全线程安全的。

文档中没有任何内容表明可重用的处理程序不能同时重用,尽管当前的Microsoft实现似乎只是连续重用它们。但是,至少在理论上,单个处理程序实例可以由多个请求同时重用,因此您不应该依赖可能被其他并发线程修改的任何数据。

答案 2 :(得分:3)

如果您没有在该实例中存储任何状态(即:您没有任何字段(也称为“类变量”)),那么您应该安全地重复使用它。

默认为false是安全的。