c# - .NET 中的 JIT 编译器和事件处理程序

标签 c# .net compilation runtime jit

我对 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/

相关文章:

c# - 为什么方法调用会因参数异常而失败?

c# - 从 Web 平台安装程序安装 ASP.NET MVC 4

C# : Pass int array to c++ dll

.net - obj 目录的用途

c++ - 另一个混淆与 "Interpretation"的概念有关。请参见

c# - 在 C# 中,给定当前和先前状态计算 "trend"的最简单方法是什么?

c# - XML 序列化和空集合

c# - 在纯asp.net中,不是mvc3+,通过路由调用controller的方法

mysql - gem 安装mysql : Failed to build gem native extension (Mac Lion)

JavaCompiler、StandardJavaFileManager 抛出 NPE