2009-03-07 18 views
49

仮想メモリーの断片化やメモリー不足の問題が多数発生しており、3GBの制限を超えています。web.configのデバッグ=真実=悪いことは?

コンパイルデバッグはweb.configではtrueに設定されていますが、私は尋ねるすべての人から異なる回答を得ます。デバッグをtrueに設定すると、各aspxがRAMのランダムな領域にコンパイルされ、メモリの問題?

答えて

3

AFAIK "debug = true"あなたが言及した状況を引き起こしません。

私は、オンザフライで画像を作成したASP.NETアプリケーションで同じ問題に直面しました。

だから、私はあなたがリソースを廃棄することに問題があると思います。

コードビハインドファイルを使用してaspxファイルをサーバーに展開する場合。これは、要求がaspxに来ると一度コンパイルされます。ファイルが変更されるまでキャッシュに格納されます。

11

実際にアプリケーションをデバッグする必要がない限り、web.configではデバッグフラグをfalseに設定する必要があります。

デバッグモードで実行すると、メモリ使用量が多少増加する可能性がありますが、お話ししているほど深刻な問題はないようです。ただし、それが持つ効果を除外するためにはfalseに設定し、改善が見られるかどうか確認する必要があります。

デバッグモードで実行すると、ガーベジコレクションが異なる動作をします。変数のライフタイムは、実際の使用量から変数のスコープまで(デバッガの値を表示できるように)拡大されます。これにより、オブジェクトがガベージコレクションされる前に、オブジェクトの存続期間が長くなります。

デバッグモードでコンパイルするときにコンパイラがコードを最適化しないで、さらに余分なnop命令が追加され、各コード行にブレークポイントを配置できる命令が少なくとも1つあります。

例外をスローすると、デバッグモードでかなりの時間がかかります。 (ただし、通常、コードは例外をスローすることはありません)。

73

Scott Guthrie(ASP.NET開発チームのマネージャ)はinteresting post about itです。デバッグを残してはならない理由

最も重要なポイント=「true」を、次のとおりです(一部のバッチの最適化が無効になっているので)

    ASP.NETページのコンパイルに時間がかかる
  1. コードが遅く実行することができます(一部の追加のデバッグパスが有効なので)
  2. 実行時にアプリケーション内でメモリがかなり使用される
  3. WebResources.axdハンドラからダウンロードされたスクリプトと画像は、ブラウザによってキャッシュされず、クライアントとサーバー

彼はまた、マシン上で実行されているすべてのアプリケーションのデバッグ=「true」のフラグを上書きグローバルすることを可能にするのmachine.config内のフラグ<deployment retail=”true”/>を、言及(例えばプロダクションサーバー上)。


更新:あなたはScott Hanselman's recent blog postで読むことができるようdebug="true"でWebアプリケーションを展開することは、まだ悪いです:

デバッグ= "真" が悪い理由はここにあります。真剣に、我々は冗談ではない。

  • オーバーライド要求実行タイムアウトが
  • それは事実上無限作ることは1.1で
  • を追跡するデバッグ情報のための1.1では
  • は、CLRによる過度のメモリ使用量につながるの両方のページとJITコンパイラの最適化を無効にします、オフにダイナミックページの一括編集により、1ページに1つのアセンブリが作成されます。
  • VB.NETコードでは、WeakReferencesの過剰な使用につながります(編集および継続サポートに使用されます)。

重要な点:時々信じられていることとは対照的に、要素内でretail = "true"を設定することは、debug = "true"を持つことに対する直接的な解毒剤ではありません!

+3

私の会社では、すべてのプロダクションWebサーバにmachine.configにデプロイタグが設定されているという標準的なポリシーがあります。これは、多くの頭痛を和らげます。 – Chris

0

本稼動システムでは、常にDebug = falseを設定します。フラグが示唆しているように、開発システムをデバッグする場合にのみtrueに設定する必要があります。

このフラグは、メモリの断片化の問題とは関係ありません。

4

メモリには絶対に影響する可能性があります。perfmonカウンタの一部を見て、両方の設定を比較してみてください。

サイトに多くのファイルがある場合は、asp.net tempフォルダのdisk ioにもっと関心があります。

カップルの質問を...

  1. はあなたにApp_Code内のファイルの多くを持っていますか?
  2. サイトの更新を許可しているのですか、それとも公開していますか?
  3. サイトが頻繁に更新されている場合や、展開プロセスがある場合は、
  4. ハードウェア構成とは何ですか?

なぜ複数の設定を使用しないのですか?

Web.Debug.Configは - Web.UAT.Configオンデバッグがあります - しているデバッグは

あなたが開発者のような回帰設定エラーを最小限に抑えることができるこの方法をオフに - どちらがお好み Web.Release.Config

関連する問題