作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在对我的一个较大的 MVC 应用程序进行大规模重构/速度调整。它已经部署到生产环境几个月了,我开始在连接池中等待连接超时。我已将问题追溯到连接未正确处理的问题。
有鉴于此,我对我的基本 Controller 进行了此更改:
public class MyBaseController : Controller
{
private ConfigurationManager configManager; // Manages the data context.
public MyBaseController()
{
configManager = new ConfigurationManager();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (this.configManager != null)
{
this.configManager.Dispose();
this.configManager = null;
}
}
base.Dispose(disposing);
}
}
现在我有两个问题:
configManager
管理DataContext
暴露IQueryable<>
参数为意见,我需要确保 Dispose()
不会被称为在 View 完成渲染之前在 Controller 上。Dispose()
在渲染 View 之前或之后在 Controller 上?或者,MVC 框架是否留下了这一点?到垃圾收集器?最佳答案
在渲染 View 后调用 Dispose,始终。
View 在对 ActionResult.ExecuteResult
的调用中呈现。它由 ControllerActionInvoker.InvokeAction
(间接)调用,而后者又由 ControllerBase.ExecuteCore
调用。
由于渲染 View 时 Controller 位于调用堆栈中,因此无法将其释放。
关于asp.net-mvc - ASP MVC : When is IController Dispose() called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380019/
我是一名优秀的程序员,十分优秀!