编写http处理程序/模块时,有一个要实现的接口成员 - bool IsReusable。
这位会员有什么意义?如果我将其设置为false(或true),这对于其他Web应用程序意味着什么?
答案 0 :(得分:149)
处理程序的正常入口点是ProcessRequest方法。但是,您可能在类构造函数中包含了一些代码,这些代码将一些构建成本很高的实例值放在一起。
如果指定Reusable为true,则应用程序可以缓存实例并通过一次又一次地调用其ProcessRequest方法在另一个请求中重用它,而不必每次都重新构建它。
应用程序将实例化处理当前负载所需的许多处理程序。
缺点是如果所需的实例数大于当前存在的实例数,则会导致使用更多内存。相反,它们也可以减少表观内存使用量,因为它们的实例值将在GC周期中存活,并且不需要经常重新分配。
另一个需要注意的是,您需要确保在ProcessRequest执行结束时,对象状态与您希望另一个请求重用该对象一样。
答案 1 :(得分:46)
继AnthonyWJones的回答之后,如果你的HTTP处理程序为true
返回IsReusable
,那么你应该确保它是完全线程安全的。
文档中没有任何内容表明可重用的处理程序不能同时重用,尽管当前的Microsoft实现似乎只是连续重用它们。但是,至少在理论上,单个处理程序实例可以由多个请求同时重用,因此您不应该依赖可能被其他并发线程修改的任何数据。
答案 2 :(得分:3)
如果您没有在该实例中存储任何状态(即:您没有任何字段(也称为“类变量”)),那么您应该安全地重复使用它。
默认为false是安全的。