我想了解JIT内联无处不在。
假设在我的代码中,我调用了来自System.IO
程序集的函数,并将回调引用传递给我的代码中实现的函数,以便从System.IO
函数内部调用。在我的函数中GetCallingAssembly()
调用了System.IO
。因此,如果我的回调被内联到GetCallingAssembly()
,那么System.IO
的调用最初是在我的代码中,而且是为了说明"当前"从{{1}}内部调用的方法会说现在从我的代码中调用它。
是否可以进行此类内联,或者是否对.NET运行时程序集进行了不同的处理,以便不允许将用户代码内联到.NET运行时代码中?
答案 0 :(得分:3)
您可以放心地假设回调不会内联。 .NET Framework程序集总是在安装时由ngen.exe预先安装,之后没有选项可以更改该代码。此外,即使抖动优化器可以推断出委托的目标方法可能是什么,也不会内联通过委托的回调。