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

当编写一个http处理程序/模块时,有一个接口成员来实现调用 – 布尔IsReusable 。

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

处理程序的正常入口点是ProcessRequest方法。 但是,您可能在类构造函数中包含代码,这些代码构build的代价很高。

如果指定Reusable为true,则应用程序可以caching该实例,并通过简单地调用其ProcessRequest方法一次又一次地将其重用到另一个请求中,而无需每次都重新构build该实例。

应用程序将实例化许多这些处理程序,因为需要处理当前的负载。

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

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

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

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

如果你不存储任何状态(即:你没有任何字段(又名“类variables”)),那么你应该安全地重用它。

在安全方面默认是错误的。