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/