asp.net-mvc - MVC 请求生命周期 - 何时/如果发生对象处置?

标签 asp.net-mvc httprequest dispose lifecycle

Possible Duplicate:
What is the ‘page lifecycle’ of an ASP.NET MVC page, compared to ASP.NET WebForms?

在 ASP.NET MVC 中,我在读过的大量“页面生命周期”或“请求生命周期”文章中找不到任何涉及对象处置的内容。在操作方法中,如果我创建到数据库的连接(或者可能创建到 EF 的上下文),如果我没有显式调用 dispose,它是否会被释放?

我知道绑定(bind)到 View 的模型仍然需要打开连接(特别是如果它提供具有关联的 EF 对象),但是它会处理请求期间实例化的所有内容吗?如果是这样,有人可以向我指出这个记录吗?

最佳答案

为每个请求创建 Controller 对象的新实例。这意味着一旦执行操作,对该 Controller 的引用就会丢失。剩下的就是垃圾收集器来处理和关闭所有资源密集型对象。

因此,最佳实践始终是在操作方法本身中关闭并处置所有重型对象。

我知道绑定(bind) EF 对象时 View 需要实时连接。同样,这里的最佳实践是在绑定(bind)到 View 之前枚举它们。

您的问题的答案是 - 垃圾收集器将负责处置或关闭在操作方法中保持打开状态的连接 - 这是一个灾难公式。

编辑 注意: Controller 类实现了 IDisposable,因此应在请求处理后将其释放。但是,当我检查 DefaultControllerFactory 的源代码时,我无法找出任何使用范围或显式 dispose 调用。

引用

http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5d4159c85ff6#src/System.Web.Mvc/DefaultControllerFactory.cs

关于asp.net-mvc - MVC 请求生命周期 - 何时/如果发生对象处置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14056879/

相关文章:

c# - 当一个对象(比如位图)成为孤立对象时,我该如何处理它?

javascript - 如何设置按钮以使用 jQuery、AJAX、JSON 和 MVC 调用不同的按钮?

node.js - 在 Node.js 中发送带有参数的 http get 请求

javascript - AJAX - 重新加载网页的一部分而不使用单独的文件来加载

c# - Win32.DestroyIcon 与 Icon.Dispose

c# - 错误 : a SafeHandle or CriticalHandle of type ZLibStreamHandle failed to properly release

asp.net - 什么是用于安全目的的验证码?

jquery - 浏览器ScrollEnd事件

asp.net-mvc - asp.net mvc - 如何在路由中配置默认​​参数

csv - JMeter:使用 CSV 数据将参数传递到 HTTP GET 请求查询字符串