2011-03-03 77 views
12

我有大量的ASP.NET(4.0)Web應用程序在每個請求期間似乎泄漏(少量)的內存。這是一個很小的數目,對於大多數使用情況來說,它不會成長爲幾周甚至幾個月一次的問題。我通常會盡力關閉應用程序管理的任何連接,避免狀態變量(或我的單例實例變量)等。我應該將ASP.NET應用程序池設置爲自動回收嗎?

我的問題是這樣的 - 這是ASP.NET應用程序的正常行爲嗎?在閒置20分鐘後,我關閉了回收應用程序池的默認(IIS 7)行爲。我這樣做是因爲應用程序需要幾分鐘來構建其內部緩存,並且我希望避免對用戶體驗產生負面影響(並且讓他們在發出請求時等待應用程序啓動)。

我知道這可以通過序列化緩存或加速緩存生成過程來緩解,但我的問題更多地與它的原理有關:我個人認爲依靠IIS自動回收功能作爲bandaid方法。我錯了嗎?我只是沒有看到工作中的垃圾收集器,因爲與可用內存的數量相比,應用程序的內存使用量不夠高?還是應該深入研究內存問題?

任何有識之士將不勝感激。

+0

關於內存泄漏問題 - 確保您丟棄所有一次性(IDispose)對象。您可以使用Gendarme(http://www.mono-project.com/Gendarme)等靜態代碼分析工具在代碼中查找這些類型的問題,或使用運行時分析器在運行時捕獲這些問題。 – 2011-03-03 22:37:29

回答

8

不幸的是,它正常,但主要是應用程序編寫者比其他任何其他應用程序的作家。

由於這個原因,IIS默認情況下會配置新創建的應用程序池,以便每1740分鐘回收一次。

正如你所說,這是一個創可貼。清理所有資源(包括懸掛事件處理程序)的編寫良好的應用程序不應該泄漏。

請參閱this關於此主題的博客文章。

相關問題