asp.netで作ったシステムが1年ぐらい運用し、急にOutOfMemoryException例外が発生しました。データ量は約50Mなのに、ローカルのテストで問題なかったですが、原因がわからない。 可能な原因は
IIS6では、最大800Mを利用可能です、超えると OutOfMemoryExceptionの例外が発生します。IISにリサイクルの設定が重要です、IISマネージャを起動して、「アプリケーション プール」をクリックして、一覧を表示させます。設定対象アプリケーションプールの上で右クリックし、「リサイクルの設定」をクリックすると、「アプリケーションプールのリサイクル設定の編集」ウィンドウが起動されます、この中で設定できます。 C# はマネージコードですが、ソースコード中では、メモリの開放を注意しなければならない。でもコーディング中の「注意」って、なかなか難しいですね、ちょっといい対策方法を紹介します。 Global.asaxのApplication_Errorイベント内で、この例外をキャッチします。 ソースコードサンプル: //例外を取得する Exception objExp = HttpContext.Current.Server.GetLastError(); //ループで内部例外を取得する for(Exception TempException = objExp; TempException != null ; TempException = TempException.InnerException) { //OutOfMemoryExceptionの場合 if(TempException.GetType().ToString() == "System.OutOfMemoryException") { //HTTPリクエストのエラーをクリアする HttpContext.Current.ClearError(); //メッセージを表示 HttpContext.Current.Response.Write("システムがメンテナンス中..."); break; } } ★月額105円~/容量最大30GB/機能満載! ロリポップ!レンタルサーバー ★ コメント:
|