我要通過我的大MVC應用程序中的一個大的重構/速度調整。它已被部署到生產幾個月,現在我開始在連接池中等待連接。我已經跟蹤了這個問題,直到沒有妥善處理的連接問題。ASP MVC:何時調用IController Dispose()?
在的光,因爲我已經做出這個改變我的基本控制器:
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
管理暴露IQueryable<>
參數 的意見DataContext
,我需要確保Dispose()
不會在控制器上被稱爲 視圖渲染完畢之前。 - 是否控制器上的MVC框架調用
Dispose()
之前或視圖渲染後?或者,MVC框架是否將 保留到GarbageCollector?
我SOOO lookig着這個問題的答案之一!偉大的問題! – 2009-09-04 15:43:43
沒有看其他代碼(你的或ASP.NET MVC的..)爲什麼你需要清空configManager?這有幫助嗎?在你們任何一個之前徹底思考「DUH」我.. – 2010-10-11 14:54:31
我的意思是在一般情況下,比賽條件可以很容易地被刪除。在這種特殊情況下,我懷疑一個控制器實例會被多個線程使用,因此不存在任何競爭條件的風險。 – 2010-10-11 14:56:25