1

私はブックライターで本を読んでいます(c#経由のCLR)ILとマネージドモジュールについて話し、ネイティブCPUコードでコンパイルされたマネージモジュールをブックライターで実行すると、マネージモジュールはアンマネージモジュールよりも高速であると述べました.私の質問は、なぜマネージモジュールアンマネージド モジュールよりも高速ですが、マネージド モジュールではまず IL にコンパイルしてからネイティブ CPU でコンパイルします。

4

1 に答える 1

1

(私が以下に書いたのは私のものではありません、それは本からのコピペですCLR via C#, Page No 14:)


マネージ コードがアンマネージ コードよりも優れている理由は多数あります。

JIT コンパイラーが実行時に IL コードをネイティブ マシン コードにコンパイルするとき、コンパイラーは、アンマネージ コンパイラーよりも多くの実行環境を認識します。

マネージ コードがアンマネージ コードよりも優れたパフォーマンスを発揮するいくつかの方法

  • JIT コンパイラは、アプリケーションが Intel Pentium 4 CPU で実行されているかどうかを判断し、CPU が提供する特別な命令を利用するネイティブ コードを生成できます。通常、アンマネージ アプリケーションは、CPU の最小公分母用にコンパイルされ、アプリケーションのパフォーマンスを向上させる特別な命令の使用を避けます。
  • JIT コンパイラは、実行中のマシンで特定のテストが常に失敗するタイミングを判断できます。例を考えてみましょう

    if (num_of_cpu > 1)
    {        
    }
    

このコードにより、マシンに CPU が 1 つしかない場合、JIT は CPU 命令を生成しません。

  • CLR はコードの実行をプロファイリングし、アプリケーションの実行中に IL をネイティブ コードに再コンパイルできます。再コンパイルされたコードは、観察された実行パターンに応じて、誤った分岐予測を減らすために再編成されます。C# の現在のバージョンではこれは行われませんが、将来のバージョンでは行われる可能性があります。
于 2013-02-04T19:30:14.463 に答える