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