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