2012-12-18 27 views
4

我只是用Ninject.Mvc3 NuGet軟件包弄溼了自己的腳,而且我想知道創建的對象持續多久。Web應用程序的'InSingletonScope'究竟有多長時間?

InRequestScope每個人都可以理解:在此範圍內創建的每個對象都會在Web服務器處理特定的Web請求時生效。 (要迂腐,對象生活只要HttpContext.Current對象不會)

但是,多長時間這樣InSingletonScope對象持續多久?該文檔說,只要Ninject內核本身 - 這是包裝了靜態類NinjectWebCommon。我迄今爲止所做的最好的猜測是,只要服務器運行webapp,內核就會存在 - 只要服務器啓動,直到應用程序在IIS中手動重新啓動或更新,對象處於範圍內。

我很好奇,因爲我很想有一些Data Accessors包含只讀數據字典作爲Singleton Scope,並且我想知道這是一個好主意還是計劃中的內存泄漏。

回答

4

只要你的ASP.NET應用程序池持續,它就會持續下去。

您的應用程序池何時回收?有很多設置可以管理這個設置:閱讀Configuring Recycling Settings for an Application Pool (IIS 7)

基本上,它不會永遠是:如果你想在那裏存儲只讀數據,只要確保你把它全部加載到Application_Start()中,這樣當請求進入時就準備好了,你應該很好去。

2

你是對的。只要應用程序池正在運行,您的單身人士就會生活。爲什麼你可能想關閉應用程序池回收。

對於我的大多數網站,我都將設置緩存在靜態類(或使用Ninject或StructureMap的單例)以及線程安全字典中的數據中。這當然會消耗內存,但這不是內存泄漏。按設計工作。

相關問題