为什么需要发出IL代码?

时间:2013-07-30 12:12:30

标签: c# il intermediate-language

我在一个非常大的代码库中工作,今天我找到了一个在正常IL code内发出class的项目。

包含要发出的IL代码的项目是Service Locator MSDN Desctiption的实现。

这样做有什么好处为什么会这样做?与使用C#语言相关?

2 个答案:

答案 0 :(得分:14)

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

然后,您可以使用反射,根据您的操作,反射速度很慢,可以构建一段新代码,直接使用给定的数据,而不使用反射。

优点:

  • 性能

缺点:

  • 难以调试
  • 很难做对
  • 之后很难阅读代码
  • 陡峭的学习曲线

因此,在开始这项工作之前,你需要确保它真的物有所值。

请注意,这是常规答案。在您遇到的具体情况中,没有办法回答为什么这样做,也没有办法在没有实际看到代码的情况下具有哪些特定的优点(或缺点)。

答案 1 :(得分:3)

这有很多用途。
最常用的方案之一是动态更改/注入代码:
.NET CLR Injection: Modify IL Code during Run-time


一个很好的教程可以帮助我理解它的用途: Dynamic... But Fast: The Tale of Three Monkeys, A Wolf and the DynamicMethod and ILGenerator Classes


祝你好运