Httphandler可重用内存如何工作?

时间:2013-05-24 05:42:48

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-2

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

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

IsReusable = true in HttHandler

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

http://Domainname/abc.jpg

众所周知,如果IsReusable = false,通过响应结束,HttpApplication的HandlerRecycleList将设置为null但是在以下情况下不是这样

IsReusable = true

问题

  1. HttpHandler内存对于IsReusable = true时的所有用户都是通用的?
  2. 或者说我请求上面的url,这个内存只会分配给我,下次会在我的情况下重用,其他用户会在Session的基础上分配HttpHandler内存吗?

1 个答案:

答案 0 :(得分:3)

是的,处理程序对所有用户都是通用的。它与任何会话对象无关。

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

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

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

缺点是如果你在处理程序中使用大量内存,这将对内存使用产生负面影响,因为这些实例将在GC周期中存活。

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