2012-12-27 68 views
2

可能重複:
What is the ‘page lifecycle’ of an ASP.NET MVC page, compared to ASP.NET WebForms?MVC請求生命週期 - 何時/如果對象處置發生?

在ASP.NET MVC,我無法找到在衆多的「頁面生命週期」或「請求生命週期」的文章我讀過,倒是什麼對象處理。在一個動作方法中,如果我創建了一個到數據庫的連接(或者爲EF創建一個上下文),如果我沒有明確地調用dispose,它會被處置嗎?

我知道綁定到視圖的模型仍然需要打開連接(特別是如果它正在爲關聯的EF對象提供服務),但是它會處理請求期間實例化的所有內容嗎?如果是這樣,有人可以指出這個記錄給我嗎?

回答

3

爲每個請求創建控制器對象的新實例。這意味着一旦執行該操作,對該控制器的引用就會丟失。剩下的就是垃圾收集器來處理和關閉所有資源密集型的對象。

因此,最佳實踐總是關閉並處理動作方法本身中的所有重型對象。

我知道該視圖在綁定EF對象時需要實時連接。再次,這裏的最佳做法是在綁定到視圖之前枚舉它們。

您的問題的答案是 - 垃圾收集器將負責處理或關閉在操作方法中保持打開的連接 - 這是一個災難的公式。

編輯 注意:控制器類實現IDisposable,所以它應該在請求服務後處理。但是,當我檢查DefaultControllerFactory的源代碼時,我無法確定任何使用範圍或顯式的處理調用。

參考

http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5d4159c85ff6#src/System.Web.Mvc/DefaultControllerFactory.cs 
+0

'ASP.NET MVC是stateless' - 所以是的WebForms。 –

+0

謝謝我知道..只是在流程中強調:) – humblelistener

+0

謝謝!接受和1+的參考。 – OnResolve

1

在控制器作用域或作用域中聲明的每件事都在請求完成後處理。