2

我对 JIT 编译器的理解非常基础。据我了解,JIT 编译器第一次遇到一段 MSIL 代码时,会将其编译为本机代码并保存在内存中供以后使用(因此 JIT 编译器不必再次编译相同的 MSIL 代码)。

事件处理程序的想法是否相同?当应用程序中发生事件时,JIT 编译器是否在运行时为该事件编译事件处理程序中的代码?如果是这样,编译后的本机代码是否被缓存?

4

1 回答 1

2

事件处理程序的想法是否相同?

事件处理程序只是一个委托,它反过来总是引用一个方法。由于 JIT 将编译一个方法并缓存它,所有事件处理程序都会发生同样的事情,因为它们的底层代码只是一个方法。

如果您指的是使用lambda 表达式定义和编写的事件处理程序,即:

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

在内部,这仍然是一种正常的方法。编译器将lambda 转换为已编译 IL 中的普通方法。匿名方法也是如此。

于 2013-09-17T00:33:19.907 回答