JIT は、そのアセンブリのメソッドが呼び出されたときにアセンブリをメモリにロードしますが、このアセンブリのアプリケーションで一部のメソッドが使用され、一部のメソッドが使用されていない場合、このメソッドがまだメモリにロードされるかどうか?
また、未使用の関数やメソッドが多数あるメモリにアセンブリがロードされた場合、そのアプリケーションのパフォーマンスに影響しますか?
JIT は、そのアセンブリのメソッドが呼び出されたときにアセンブリをメモリにロードしますが、このアセンブリのアプリケーションで一部のメソッドが使用され、一部のメソッドが使用されていない場合、このメソッドがまだメモリにロードされるかどうか?
また、未使用の関数やメソッドが多数あるメモリにアセンブリがロードされた場合、そのアプリケーションのパフォーマンスに影響しますか?
@Dennisが言ったように、ロードとJIT'ingは、CLRの2つの異なるサブシステムによって実行される2つの異なる操作です。しかし、彼らは依存しています。
コンテキストで 2 つの質問があります。それらに答える必要があります。
JIT はアセンブリをロードしませんが、ローダーはロードします。すべてのクラスとそのメンバーのメタデータはメモリにロードされますが、メソッド自体はオンデマンド (つまり、呼び出されたとき) にのみ JIT されます。
JITされたメソッドは、誰かが参照しない限り、メモリに長く留まりません。CLR は、クリーンアップ手順に基づいてそれらをクリーンアップします。そして、そのメソッドが後の段階で必要になった場合は、メソッドがロードされ、再度再コンパイル (JIT) されます。したがって、理想的なシナリオでは、未使用の関数がアプリケーションのパフォーマンスに影響を与えることはありません。
アセンブリの読み込みと JIT コンパイルを混同しないでください。
アセンブリが一度読み込まれると、そのアセンブリで定義された型が使用されます (どのように使用されるかは問題ではありません。これは、たとえば、パブリック フィールド アクセスである可能性があります)。しかし、JIT コンパイル (つまり、IL からマシン命令への変換) は、1 つまたは別のメソッドを実行する必要があるときに何度も発生します。
アセンブリの読み込みは、そのアセンブリ内のすべてのメソッドの JIT コンパイルを意味するものではありません。
AppDomain に読み込まれたアセンブリのパフォーマンス カウンターをお探しですか? これは、Windows SDK に適した方法である可能性があります。この一連のメトリックにはいくつかのパフォーマンス カウンターがあります - http://msdn.microsoft.com/en-us/library/ekec01h3.aspx
上で指定したカウンターを使用して perfmon を実行し、使用している別のアプリケーションとの比較データを収集できます。このようなマイクロ最適化を検討する場合は、ベースライン メトリックを取得し、変更してパフォーマンスの低下を確認するのがおそらく最善です。 perfmon の実行
仕様によると、CLR は、そのアセンブリのいずれかのタイプが初めて使用されるときにアセンブリを読み込みます。アセンブリの一部のみをロードすることを CLR に伝える方法はないと思うので、すべての型とメソッド (使用または未使用) がメモリにロードされますが、コンパイル (JIT 処理) は型が(またはおそらくメソッド)が使用されています。
パフォーマンスの考慮事項については、これはパフォーマンスには影響しませんが、メモリ使用量に影響を与えると言えます。