Жизненный цикл запроса MVC - когда / если происходит удаление объекта?
Возможный дубликат:
Что такое "жизненный цикл страницы" страницы ASP.NET MVC по сравнению с веб-формами ASP.NET?
В ASP.NET MVC я не могу найти ничего из многочисленных статей о "жизненном цикле страницы" или "запрос жизненного цикла", которые я читал, которые касаются удаления объектов. В методе действия, если я создаю соединение с базой данных (или, возможно, создаю контекст для EF), удаляется ли он когда-либо, если я явно не вызываю dispose?
Я знаю, что для привязки модели к представлению все еще может потребоваться открытое соединение (особенно, если оно обслуживает объект EF с ассоциациями), но затем ли оно распоряжается всем, что было создано во время запроса? Если так, может кто-то указать мне на это, пожалуйста?
2 ответа
Новый экземпляр объекта контроллера создается для каждого запроса. Это означает, что ссылка на этот контроллер теряется при выполнении действия. Там на нем остается сборщик мусора, чтобы утилизировать и закрыть все ресурсоемкие объекты.
Таким образом, наилучшей практикой всегда является закрытие и удаление всех тяжелых объектов в самом методе действия.
Я понимаю, что представление будет требовать живых соединений при связывании объектов EF. Опять же, лучшая практика здесь состоит в том, чтобы перечислять их перед привязкой к представлению.
Ответ на ваш вопрос таков: сборщик мусора будет отвечать за удаление или закрытие соединения, оставленного открытым в действии, - и это формула катастрофы.
РЕДАКТИРОВАТЬ Примечание: класс контроллера реализует IDisposable, поэтому он должен быть удален после обработки запроса. Однако, когда я проверил исходный код DefaultControllerFactory, я не смог понять какой-либо использующий контекст или явный вызов dispose.
ссылка
http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5d4159c85ff6#src/System.Web.Mvc/DefaultControllerFactory.cs
Все, что объявлено в области контроллеров или области действия, удаляется после завершения запроса.