我对 JIT 编译器的理解非常基础。据我了解,JIT编译器第一次遇到一段MSIL代码时,会将其编译为 native 代码并保存在内存中以供以后使用(因此JIT编译器不必再次编译相同的MSIL代码)。
事件处理程序的想法是否相同?当应用程序中发生事件时,JIT 编译器是否会在运行时编译该事件的事件处理程序中的代码?如果是,编译后的 native 代码是否被缓存?
最佳答案
Is it the same idea for event handlers?
事件处理程序只是一个委托(delegate),而委托(delegate)又始终引用一个方法。由于 JIT 将编译一个方法并缓存它,因此所有事件处理程序都会发生同样的事情,因为它们的底层代码只是一个方法。
如果您指的是使用 lambda expression 定义和编写的事件处理程序,即:
SomeEvent += (o,e) => DoFoo();
在内部,这仍然是一个正常的方法。编译器将 lambda 转换为已编译 IL 中的普通方法。 anonymous methods 也是如此。 .
关于c# - .NET 中的 JIT 编译器和事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18839477/