程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET中OutOfMemoryException異常的處理方案

ASP.NET中OutOfMemoryException異常的處理方案

編輯:關於ASP.NET

相信做ASP.NET中大型Web應用的人都碰到過OutOfMemoryException這個異常,對於這個問題我研究了很久,在微軟的技術文檔上也了解過此問題出現的原因,說實話,到目前我仍然沒有完美的解決方案,這裡只是把我處理該問題的一些經驗提出來和大家一起分享,盡可能的避免該問題的發生。

1) 首先,在硬件的配置上,出現該問題的原因我想很多人已經知道了,那就是IIS對於內存的管理存在一些限制,普遍的認識是800M的線程內存使用上限(通過我的一些客戶實踐證明的確如此,甚至更低...),不管是w3wp還是aspnet_wp,這個限制對ASP.NET應用服務器的機器配置而言其意義是很明顯的,超過2G的內存對於單純的Web服務器而言作用是很微小的,所以在Web服務器的配置上可在CPU的數量方面多考慮。

2) IIS配置上的方案,IIS5.0可安裝一個IIS5Recycle程序,該程序采用服務的形式來回收工作進程,安裝說明:http://support.microsoft.com/?id=322350,對於IIS6.0可以在應用程序池的配置上設置自動回收工作線程的時間,我一般都會設在凌晨2點:)

3) 在.NET Framework的配置上,修改machine.config配置文件中的配置節<processModel>的屬性“memoryLimit”,這個屬性的值默認為“60”,是一個百分比數據,我們需要按照服務器實際的內存數,再根據800M的上限來設置這個值,那麼在達到這個閥值時IIS會自動回收進程

4) 在Web應用程序的開發中,必須盡可能的減少對內存使用的浪費,及時釋放資源,我想說明的有3點:1、通過代碼主動調用Dispose方法進行資源釋放,2、對於實體類盡可能復用,不做多余的聲明和創建,3、減少Session的使用,縮短Session的有效期,尤其對於大數據對象盡量不要存儲在Session中

5) 一個比較通用的辦法,在Web應用程序的基類中通過try{}catch{}來主動捕捉OutOfMemoryException異常,發現該異常後直接調用GC.Collect()進行強制垃圾回收。

最後,有很多朋友提到32位系統對於大內存使用方面可以打開3G模式,這個本身沒有什麼問題,只是根據個人經驗,其對單純Web應用程序的幫助不大,如果Web服務器還有更多的用途當然也建議采用此模式.

希望對大家處理此問題有幫助.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved