我正在对其中一个较大的MVC应用程序进行大的重构/速度调整。现在已经将它部署到生产中了几个月,而我开始等待连接池中的连接等待超时。我已将问题归结为未正确处理的连接。
鉴于此,我此后对基本控制器进行了更改:
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()
在视图完成渲染之前不会在控制器上调用该参数。 - MVC框架
Dispose()
是在呈现视图之前还是之后在Controller上调用的?还是MVC框架将其留给GarbageCollector?