首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET OutOfMemoryException 異常處理與記憶體優化實戰策略

     編輯:關於ASP.NET

大型 ASP.NET Web 應用常遇到 OutOfMemoryException,根因在於 IIS 工作進程的記憶體限制(32 位元環境約 800MB-1GB 有效上限)。本文綜合硬體、IIS 設定、框架配置、程式碼優化與異常攔截五個維度的緩解方案。

五大緩解策略

1. 硬體規劃:CPU 優於記憶體

32 位元 IIS 單進程虛擬記憶體上限約 2GB,實際可用常低於 1GB。超過 2GB 實體記憶體對單純 Web 伺服器邊際效益遞減,建議投資多核心 CPU 提升並行處理能力。

2. IIS 回收機制

  • IIS 5.0:安裝 IIS5Recycle 服務定期回收工作進程
  • IIS 6.0+:應用程式集區設定「定期回收」(建議凌晨 2 點)、記憶體上限回收、請求數回收

3. processModel memoryLimit 調整

<processModel memoryLimit="60" />  <!-- 預設 60%,需依實體記憶體換算 800MB 閾值 -->

例:4GB 記憶體伺服器,800MB ≈ 20%,設 memoryLimit="20" 觸發主動回收,避免觸及系統硬性上限導致異常。

4. 程式碼層面記憶體優化

  • 主動呼叫 Dispose() 釋放非託管資源(資料庫連線、檔案流、GDI+ 物件)
  • 實體類別重用,避免大量新建物件造成 Gen 2 壓力
  • 減少 Session 使用,縮短逾時,嚴禁存放大型物件(DataSet、圖片位元組陣列)

5. 基類攔截強制 GC(權宜之計)

try
{
    // 業務邏輯
}
catch (OutOfMemoryException)
{
    GC.Collect();  // 強制回收,嘗試續命
    throw;         // 重新拋出或導向錯誤頁
}

警示:頻繁強制 GC 會嚴重影響效能,僅作為最後防線,不可常態化。

關於 3GB / PAE 模式

32 位元啟用 /3GB 啟動參數可將使用者模式空間擴至 3GB,但對純 Web 應用改善有限,且可能導致核心資源不足。建議直接遷移至 64 位元 ASP.NET / IIS 徹底解決記憶體天花板。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved