用C#開發的站點出現了內存溢出錯誤:“引發類型為“System.OutOfMemoryException”的異常”
因為頁面眾多一時最初難以確定問題源,找了很久才發現了導致內存溢出的代碼。把這次的方法總結一下。
症狀:每個一段時間才會出現內存溢出的錯誤,服務器上會出現大量的頁面請求被堵塞。回收iis程序池後,會短暫正常,但是過一段時間後又出現內存溢出,時間間隔長短不一,沒有規律。
解決步驟:1,判斷是某個頁面被請求到時引發的內存溢出錯誤。
2,尋找有問題的頁面
存在內存溢出錯誤代碼的頁面,當被請求時,應該不會被執行結束。
所以,通過OnPreInit方法,在所有頁面被請求時,將該頁面的地址,請求時間記錄到數據庫中。每次請求都會在數據庫中增加一條記錄。
在頁面執行到OnUnload方法時,再將該頁面的總執行時間更新到上面提到的請求記錄中。(新增時,總執行時間默認為-1)
通過上述方式,分析幾次內存溢出發生時,沒有被執行結束的頁面。最終確定的問題頁面所在,修改代碼上傳後,內存溢出問題解決。