asp.net - Httphandler 可重用内存如何工作?

标签 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. IsReusable = true 的情况下,HttpHandler 内存对于所有用户来说都是公用的?
  2. 或者假设我请求了上述 url,该内存将仅分配给我,下次在我的情况下将重用它,而其他用户将在 session 基础上分配 HttpHandler 内存?

最佳答案

是的,该处理程序对于所有用户都是通用的。它不绑定(bind)到任何 session 对象。

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

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

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

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

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

关于asp.net - Httphandler 可重用内存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728354/

相关文章:

html - 将 bootstrap CSS 类属性添加到文本框 ASP.Net MVC

c# - 如何在 ASP.Net MVC3 网站中添加 comet 实现?

javascript - 如何设置 OnClientClick 值 - 语法?

c# - 将 Plupload 与 ASP.NET/C# 结合使用

asp.net-mvc - MVC AuthenticationManager.SignOut() 未注销

jquery - 将 jQuery 添加到 ASP.NET MVC 应用程序

json - 将 json 对象发布到 MVC3 Controller , bool 值始终为 false

asp.net-mvc-3 - 有没有办法迭代 ASP.NET MVC3 站点中的所有 Controller /操作?

c# - 如何修改所有 ASP.NET 控件以继承 self 的特殊控件?

asp.net - 从 HTML.Helper 返回 View