相关疑难解决方法(0)

ASP MVC:IController Dispose()何时调用?

我正在对我的一个较大的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我有两个问题:

  1. 我是否介绍了竞争条件?由于configManager管理DataContextIQueryable<>参数公开给视图,我需要确保Dispose()在视图完成渲染之前不会在控制器上调用.
  2. MVC框架是否在Dispose()呈现视图之前或之后调用Controller?或者,MVC框架是否将其留给了GarbageCollector?

asp.net-mvc garbage-collection idisposable linq-to-sql

82
推荐指数
2
解决办法
2万
查看次数