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