【问题标题】:How Httphandler Reusable memory works?Httphandler 可重用内存是如何工作的?
【发布时间】:2013-05-19 15:56:53
【问题描述】:

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

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

IsReusable = true in HttHandler

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

http://Domainname/abc.jpg

众所周知,如果IsReusable = false,在响应端,HttpApplication的HandlerRecycleList会被设置为null,但是在following的情况下不是这样

IsReusable = true

问题

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我有一个问题。谢谢你的耐心。 :当您请求特定页面时,它的HttpHandler 被调用?这是因为该页面是从HttpHandler 派生的,然后创建了Page 对象?然后调用Page Events?是这样的吗?
    猜你喜欢
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多