4

我创建了一个 HttpHandler,以下是 Web.config 中的设置

<add verb="*" path="*.png" type="MvcApplication1.Handler2"/>

IsReusable = true in HttHandler

假设我的应用程序中有 20 个用户,他们正在尝试输入以下 url

http://Domainname/abc.jpg

众所周知IsReusable = false,如果在响应结束时,HttpApplication 的 HandlerRecycleList 将设置为 null 但在以下情况下并非如此

IsReusable = true

问题

  1. HttpHandler 内存将在什么时候对所有用户通用IsReusable = true
  2. 或者假设我请求了上面的 url,这个内存将只分配给我,下次在我的情况下将被重用,其他用户将在 Session 基础上分配 HttpHandler 内存?
4

1 回答 1

3

是的,处理程序对所有用户都是通用的。它不绑定到任何会话对象。

如果将 Reusable 设置为 true,实例将被缓存并在其他请求中重用,只是一遍又一遍地调用它的 ProcessRequest 方法,而不创建新实例。处理程序不会为此查看会话。该应用程序将根据需要创建尽可能多的处理程序来处理当前负载。

因此,如果您有 20 个用户同时访问您的应用程序,则会创建 20 个实例。另一方面,如果您有 20 个用户依次访问您的处理程序,则只有一个实例将被(重新)使用。

您无法控制创建的实例数量,这是按需完成的。

不利的一面是,如果您在处理程序中使用大量内存,这将对内存使用产生负面影响,因为这些实例将在 GC 循环中存活。

您还必须确保 processRequest 结束时的状态对于下一个请求有效。

于 2013-05-28T11:28:10.157 回答