Asp.net
我應該將 ASP.NET 應用程序池設置為自動回收嗎?
我有許多 ASP.NET (4.0) Web 應用程序似乎在每個請求期間洩漏(少量)記憶體。它是如此之小,以至於對於大多數案例來說,它不會在幾週甚至幾個月內成為問題。我通常會嘗試關閉由應用程序管理的任何連接,避免使用狀態變數(或我的單例的實例變數)等。
我的問題是 - 這是 ASP.NET 應用程序的正常行為嗎?在空閒 20 分鐘後,我關閉了回收應用程序池的預設 (IIS 7) 行為。我這樣做是因為應用程序需要幾分鐘來建構其內部記憶體,並且我想避免對使用者體驗產生負面影響(並讓他們在發出請求時等待應用程序啟動)。
我知道這可以通過序列化記憶體或加速記憶體生成過程來緩解,但我的問題更多地與它的原理有關:我個人認為依賴 IIS 自動回收功能作為一種創可貼的方法。我錯了嗎?我只是因為應用程序的記憶體使用量與可用記憶體量相比不夠高而沒有看到垃圾收集器在工作嗎?還是我應該更深入地研究記憶體問題?
任何見解將不勝感激。
不幸的是,這是正常的,儘管主要是由於劣質的應用程序編寫者而不是其他原因。
出於這個原因,預設情況下 IIS 將新創建的應用程序池配置為每 1740 分鐘回收一次。
正如你所說,這是一個創可貼。清除所有資源(包括懸空事件處理程序)的編寫良好的應用程序根本不應該洩漏。
請參閱有關該主題的部落格文章。