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