JIT内联是否可以将我的代码内联到某些.NET运行时汇编代码中?

sha*_*oth 5 .net c# reflection jit

我想了解JIT内联无处不在.

假设在我的代码中,我从say System.IO程序中调用一些函数,并将一个回调引用传递给我的代码中实现的函数,以便从该System.IO函数内部调用.在我的功能中有GetCallingAssembly()电话.因此,如果我的回调被内联到最初在我的代码中System.IO的调用GetCallingAssembly(),并打算说从内部调用"当前"方法System.IO将说它现在从我的代码内部调用.

这样的内联是否可行,或者.NET运行时程序集是否被区别对待,以便不允许将用户代码内联到.NET运行时代码中?

Han*_*ant 3

您可以放心地假设回调不会被内联。.NET Framework 程序集始终由 ngen.exe 在安装时进行预编译,之后无法更改该代码。此外,即使抖动优化器可以推断委托的目标方法可能是什么,通过委托的回调也永远不会内联。