Я перехожу к большому рефакторингу/настройке скорости одного из моих более крупных приложений 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()
на контроллере до или после отображения представления? Или же структура MVC оставляет это до GarbageCollector?