2

JIT コンパイラーに関する私の理解は非常に基本的なものです。私が理解していることから、JIT コンパイラが最初に MSIL コードの一部に遭遇すると、それはネイティブ コードにコンパイルされ、後で使用するためにメモリに保持されます (したがって、JIT コンパイラは同じ MSIL コードを再度コンパイルする必要はありません)。

イベントハンドラーについても同じ考えですか? アプリケーションでイベントが発生した場合、JIT コンパイラは実行時にそのイベントのイベント ハンドラーでコードをコンパイルしますか? もしそうなら、コンパイルされたネイティブコードはキャッシュされていますか?

4

1 に答える 1

2

イベントハンドラーについても同じ考えですか?

イベント ハンドラーは単なるデリゲートであり、常にメソッドを参照します。JIT はメソッドをコンパイルしてキャッシュするため、すべてのイベント ハンドラーで同じことが起こります。これは、基になるコードが単なるメソッドであるためです。

ラムダ式を使用して定義および記述されたイベント ハンドラーを参照している場合、つまり:

SomeEvent += (o,e) => DoFoo();

内部的には、これはまだ通常の方法です。コンパイラは、ラムダをコンパイル済み IL の通常のメソッドに変換します。匿名メソッドについても同様です。

于 2013-09-17T00:33:19.907 に答える