多くの仮想メモリの断片化とメモリ不足エラーが発生し、3GBの制限に達しました。
コンパイルデバッグはweb.configでtrueに設定されていますが、私が尋ねるすべての人から異なる回答が得られます。デバッグをtrueに設定すると、各aspxがRAMのランダムな領域にコンパイルされ、RAMが断片化され、最終的にメモリ不足の問題が発生しますか?
Scott Guthrie(ASP.NET開発チームのマネージャー)には それに関する興味深い投稿 があります。
debug="true"
を残してはならない最も重要なポイントは次のとおりです。
- ASP.NETページのコンパイルには時間がかかります(一部のバッチ最適化が無効になっているため)
- コードの実行が遅くなる可能性があります(追加のデバッグパスが有効になっているため)
- 実行時にアプリケーション内でより多くのメモリが使用されます
- WebResources.axdハンドラーからダウンロードされたスクリプトと画像はブラウザーによってキャッシュされないため、クライアントとサーバー間のリクエストが増えます
彼はmachine.configの<deployment retail=”true”/
>フラグにも言及しています。これにより、マシン(実稼働サーバーなど)で実行されているすべてのアプリケーションのdebug = "true"フラグをグローバルにオーバーライドできます。
Update:debug="true"
を使用したWebアプリのデプロイは、 Scott Hanselmanの最近のブログ投稿 :
Debug = "true"が悪い理由は次のとおりです。真剣に、私たちは冗談ではありません。
- リクエスト実行タイムアウトをオーバーライドして、事実上無限にします
- ページとJITコンパイラーの両方の最適化を無効にします
- 1.1では、CLRがデバッグ情報の追跡のためにメモリを過剰に使用します。
- 1.1では、動的ページのバッチコンパイルをオフにして、ページごとに1つのアセンブリを作成します。
- VB.NETコードの場合、WeakReferencesの過剰な使用につながります(編集および継続サポートに使用)。
重要な注意:時々信じられていることとは反対に、要素にretail = "true"を設定することは、debug = "true"を持つことに対する直接的な解毒剤ではありません!
アプリケーションを実際にデバッグする必要がない限り、web.configでデバッグフラグをfalseに設定する必要があります。
デバッグモードで実行すると、メモリ使用量が多少増加する可能性がありますが、あなたが話しているほど深刻な問題ではないでしょう。ただし、その効果を除去するためにfalseに設定し、改善が見られるかどうかを確認する必要があります。
デバッグモードで実行すると、ガベージコレクションの動作が異なります。変数の有効期間は、実際の使用から変数のスコープに拡張されます(デバッガーで値を表示できるようにするため)。これにより、一部のオブジェクトはガベージコレクションされるまでの期間が長くなります。
コンパイラは、デバッグモードでコンパイルするときにコードを最適化しません。また、いくつかの余分なnop
命令が追加され、各コード行にブレークポイントを配置できる命令が少なくとも1つ含まれます。
デバッグモードでは、例外のスローにかなり時間がかかります。 (ただし、通常、コードはそれほど頻繁に例外をスローすべきではありません。)
それは絶対にメモリに影響を与える可能性があり、perfmonカウンタのいくつかを見て、両方の構成との比較を実行するだけです。
サイトに多くのファイルがある場合は、asp.net tempフォルダーのディスクioに関心があります。
カップルの質問...
複数の構成を利用しないのはなぜですか?
Web.Debug.Config-デバッグを有効にするWeb.UAT.Config-好みに応じてWeb.Release.Config-デバッグを無効にする
このようにして、debug = "true"でweb.configをチェックインする開発者のような回帰構成エラーを最小限に抑えることができます。
AFAIK "debug = true"は、あなたが言及した状況を引き起こしません。
その場で画像を作成するASP.NETアプリケーションでも同じ問題に直面していました。
廃棄されていないリソースに問題があると思います。
分離コードファイルを含むaspxファイルをサーバーに展開する場合。要求がaspxに届くと、一度コンパイルされます。その後、ファイルが変更されるまでキャッシュに保存されます。
実稼働システムでは、常にDebug = falseを設定します。フラグが示唆するように、開発システムをデバッグする場合にのみtrueに設定する必要があります。
このフラグは、メモリの断片化の問題とは関係ありません。