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

问题描述 投票:128回答:3

在编写http处理程序/模块时,有一个实现的接口成员叫做bool IsReusable

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

asp.net httphandler ihttphandler
3个回答
150
投票

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

如果指定Reusable为true,则应用程序可以缓存实例并通过一次又一次地调用其ProcessRequest方法将其重用于另一个请求,而无需每次都重新构建它。

应用程序将实例化处理当前负载所需的许多处理程序。

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

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


46
投票

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

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


3
投票

如果你没有在那个实例中存储任何状态(即:你没有任何字段(也就是“类变量”))那么你应该安全地重用它。

出于安全考虑,默认为false。

© www.soinside.com 2019 - 2024. All rights reserved.