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

本文关键字:事件处理 程序 编译器 中的 JIT NET | 更新日期: 2023-09-27 18:31:44

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

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

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

事件处理程序的想法是一样的吗?

事件处理程序只是一个委托,而委托又将始终引用方法。 由于 JIT 将编译方法并缓存它,因此所有事件处理程序都会发生同样的事情,因为它们的基础代码只是一个方法。

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

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

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