Жизненный цикл запроса 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

Все, что объявлено в области контроллеров или области действия, удаляется после завершения запроса.

Другие вопросы по тегам