是否可以在 C# 方法中插入 IL 代码?
最佳答案
我只是posted a utility它允许使用自定义属性将整个 C# 函数体自动替换为内联 IL。与类似的实用程序一样,它通过 ILDASM/ILASM 往返工作,可以将其设置为构建后步骤。该工具还可以调整 PDB,以便在调试器中的各个 IL 指令上保留单步执行和设置断点。它与其他一些往返 IL 内联器的不同之处在于它(仅)替代了整个函数体,如下所示:
class MyClass
{
[ILFunc(@"
.locals init ([0] int32 i_arg)
ldc.i4.3
ret
")]
int MyFunc(int i_arg)
{
return 3;
}
};
对于性能要求很高的方法,我尝试使用 DynamicMethod
来改进编译器生成的 IL,但发现由于委托(delegate)调用开销而失去了优势。假设没有您真正需要 DynamicMethod
的运行时自定义,Inline IL 提供了手动调整 IL 的好处而没有这种影响。
关于c# - 如何将CIL代码插入到C#中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328901/