より詳細な最適化の設定を指定することで、.NET JIT コンパイラの動作を変更する方法があるかどうか疑問に思っていました。それができない場合は、何らかのプロファイルに基づく最適化を行うことができればいいでしょう。
1 に答える
これは、アセンブリをコンパイルするときに設定されます。最適化には2つのタイプがあります。
- ILの最適化
- JITネイティブコードの品質。
デフォルト設定はこれです
/optimize- /debug-
これは、最適化されていないILと最適化されたネイティブコードを意味します。
/optimize /debug(+/full/pdbonly)
これは、最適化されていないIL、および最適化されていないネイティブコード(最適なデバッグ設定)を意味します。
最後に、最速のパフォーマンスを得るには:
/optimize+ /debug(-/+/full/pdbonly)
これにより、最適化されたILと最適化されたネイティブコードが生成されます。
最適化されていないILを生成する場合、コンパイラーはコード全体にNOP命令を挿入します。これにより、for、while、if、else、try、catchなどの制御フロー命令にブレークポイントを設定できるようになるため、コードのデバッグが容易になります。
CLRは、コードを最適化するという非常に優れた仕事をします。メソッドがJITされると、呼び出しまたはcallvirt命令のポインターがネイティブコードに直接ポイントされます。
さらに、CLRは、コードをJITするときに利用できるアーキテクチャのトリックを利用します。つまり、JITを介して実行されたアセンブリは、Ngenを使用して事前コンパイルされたアセンブリよりも高速に実行されます(起動時間はわずかに遅くなります)。NGenはすべてのプラットフォーム用にコンパイルされ、トリックを利用しないためです。