为什么需要发出IL代码

本文关键字:IL 代码 为什么 | 更新日期: 2023-09-27 18:25:26

我在一个相当大的代码库中工作,今天我发现一个项目在普通的class中发射IL code

包含正在发出的IL代码的项目是Service Locator MSDN描述的实现。

这样做有什么优点为什么要这样做与使用C#语言类似?

为什么需要发出IL代码

通常这样做是为了避免使用反射的开销,使用仅在运行时可用的信息。

然后,您可以使用反射来构建一段新的代码,该代码直接使用提供给它的数据,而不使用反射,这可能会很慢,具体取决于您所做的操作。

优点:

  • 性能

缺点:

  • 难以调试
  • 很难做到正确
  • 之后很难读取代码
  • 陡峭的学习曲线

因此,在着手之前,你需要确保它确实物有所值。

请注意,这是一个通用答案。在您遇到的特定情况下,如果没有实际看到代码,就无法回答为什么要这样做,也无法回答您会有哪些特定的优势(或劣势)。

这有很多用途
最常用的场景之一是动态更改/注入代码:
.NET CLR注入:在运行时期间修改IL代码


一个很好的教程可以帮助我理解它的良好用途:动态但速度很快:三只猴子、一只狼的故事以及动态方法和ILGenerator类


祝好运