Я прохожу большой рефакторинг / настройку скорости одного из моих больших приложений 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?