.net 4.0クラスのlibプロジェクトがあり、リリースでコンパイルすると、バイナリ(.dll)のサイズがデバッグよりも小さくないことに気付きました。どうしてこれなの?小さくしてはいけませんか?また、少し速く実行する必要がありますか?また、.dllがデバッグまたはリリースとしてビルドされているかどうかを確認するにはどうすればよいですか?
2 に答える
コードで#ifDEBUGコンパイラ指令を使用しない限り、実行可能ファイル(dll、exeなど)のデバッグとリリースは同じです。違いは、デバッグコンパイルがデバッグ情報を含む.pdbファイルを生成することです。
このツールは、dllがデバッグであるかリリースであるかを確認するのに役立ちます:http://assemblyinformation.codeplex.com
アセンブリのリリースバージョンをビルドするときにC#コンパイラが生成するILにはほとんど違いがありません。それが行う唯一の注目すべきことは、中括弧にブレークポイントを設定するのに役立つNOP命令を省略することです。空のクラスコンストラクターを発行しないように、それを少し超えただけです。コードのデバッグを容易にすることにのみ関連するすべての小さなもの。デフォルトの/filealign
オプションを考えると、結果のアセンブリが小さくならない可能性が高くなります。または、ほんの数キロバイト少ないです。
C#コンパイラにはオプティマイザが組み込まれていません。それはその仕事ではありません。オプティマイザはジッターに組み込まれています。コンパイラーが発行する属性、DebuggableAttribute.IsJITOptimizerEnabledプロパティによって制御されます。これは、デバッグビルドの場合はtrue、リリースビルドの場合はfalseです。あなたはildasm.exeでその値を見ることができます
この回答で説明されているジッターによって実行される最適化の種類を見つけることができます。