我对 JIT 编译器的理解非常基础。据我了解,JIT 编译器第一次遇到一段 MSIL 代码时,会将其编译为本机代码并保存在内存中供以后使用(因此 JIT 编译器不必再次编译相同的 MSIL 代码)。
事件处理程序的想法是否相同?当应用程序中发生事件时,JIT 编译器是否在运行时为该事件编译事件处理程序中的代码?如果是这样,编译后的本机代码是否被缓存?
我对 JIT 编译器的理解非常基础。据我了解,JIT 编译器第一次遇到一段 MSIL 代码时,会将其编译为本机代码并保存在内存中供以后使用(因此 JIT 编译器不必再次编译相同的 MSIL 代码)。
事件处理程序的想法是否相同?当应用程序中发生事件时,JIT 编译器是否在运行时为该事件编译事件处理程序中的代码?如果是这样,编译后的本机代码是否被缓存?
事件处理程序的想法是否相同?
事件处理程序只是一个委托,它反过来总是引用一个方法。由于 JIT 将编译一个方法并缓存它,所有事件处理程序都会发生同样的事情,因为它们的底层代码只是一个方法。
如果您指的是使用lambda 表达式定义和编写的事件处理程序,即:
SomeEvent += (o,e) => DoFoo();
在内部,这仍然是一种正常的方法。编译器将lambda 转换为已编译 IL 中的普通方法。匿名方法也是如此。