ASPを解決する.NETのシステムOutOfMemoryExceptionの問題
2480 ワード
プログラムコードの問題を排除
この問題が発生したのは、マルチプロセッサ(またはマルチコア)コンピュータ上のためである.NET CLRのGarbage Collection(GC)メカニズムのプリセットは、Server Mode(サーバモード)を使用して動作しています.言い換えれば、「CPUごとに独立したGCメモリ空間(スタック、Heap)」があるので、GCメモリ空間が500 MBでCPUが4個あると、2 GBのメモリが消費され、システムが発生することになります.OutOfMemoryException例外状況!
この問題を解決するには、GCをワークステーションモードに設定することで、ホスト全体で同じGC Heapを共有し、メモリの使用を節約できます.プリセットGCをWorkstation Modeに変更するには%WINDIR%Microsoftを変更する必要があります.NET\Framework\v2.0.50727\Aspnet.configファイル(.NET 1.1であれば%WINDIR%Microsoft.NETFrameworkv 1.1.4322Aspnet.configファイルを変更する):
プリセットAspnet.config長はこうです.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="false" />
<legacyImpersonationPolicy enabled="true"/>
<alwaysFlowImpersonationPolicy enabled="false"/>
<SymbolReadingPolicy enabled="1" />
</runtime>
</configuration>
行
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<runtime>
<gcServer enabled="false" />
<legacyUnhandledExceptionPolicy enabled="false" />
<legacyImpersonationPolicy enabled="true"/>
<alwaysFlowImpersonationPolicy enabled="false"/>
<SymbolReadingPolicy enabled="1" />
</runtime>
</configuration>
これで設定完了!
しかし、このようなOut of Memoryの例外は64ビットのオペレーティングシステムではほとんど問題が発生しないため、64ビットのオペレーティングシステム(Windows Server 2003 64 bitなど)を使用する場合は、このような調整はあまり必要ありませんが、あなたの内蔵はまだ十分でなければなりません.そうしないと、ページの状況が多すぎるとASPが低下します.NETアプリケーションの実行効率!
それ以外に、正式(Production)環境におけるASP.NETアプリは必ずweb.configで開発時期に設定したdebugとtraceをオフにすると、メモリに余分な負担がかかりません.なぜならASP.NETアプリケーションはdebug modeを有効にすると、すべてのSymbolファイル(*.pdb)がメモリにロードされ、多くのメモリを消費するだけでなく、実行効率も低下します.詳細については、Microsoft Knowledge Baseを参照してください.http://support.microsoft.com/kb/893660/en-us