Bool 可重用性在 http 处理程序接口中的意义

编写 http 处理程序/模块时,有一个接口成员要实现,名为 -可重复使用

这个成员的意义是什么?如果我将其设置为 false (或 true) ,那么这对于 web 应用程序的其余部分意味着什么呢?

24815 次浏览

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

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

应用程序将实例化处理当前负载所需的所有这些处理程序。

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

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

除了 Anthony WJones 的回答之外,如果 HTTP 处理程序为 IsReusable返回 true,那么您应该确保它是完全线程安全的。

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

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

为了安全起见,默认情况下是 false。