为什么需要发出IL代码
本文关键字:IL 代码 为什么 | 更新日期: 2023-09-27 18:25:26
我在一个相当大的代码库中工作,今天我发现一个项目在普通的class
中发射IL code
。
包含正在发出的IL代码的项目是Service Locator
MSDN描述的实现。
这样做有什么优点和为什么要这样做与使用C#
语言类似?
通常这样做是为了避免使用反射的开销,使用仅在运行时可用的信息。
然后,您可以使用反射来构建一段新的代码,该代码直接使用提供给它的数据,而不使用反射,这可能会很慢,具体取决于您所做的操作。
优点:
- 性能
缺点:
- 难以调试
- 很难做到正确
- 之后很难读取代码
- 陡峭的学习曲线
因此,在着手之前,你需要确保它确实物有所值。
请注意,这是一个通用答案。在您遇到的特定情况下,如果没有实际看到代码,就无法回答为什么要这样做,也无法回答您会有哪些特定的优势(或劣势)。
这有很多用途
最常用的场景之一是动态更改/注入代码:
.NET CLR注入:在运行时期间修改IL代码
一个很好的教程可以帮助我理解它的良好用途:动态但速度很快:三只猴子、一只狼的故事以及动态方法和ILGenerator类
祝好运