【发布时间】:2012-10-01 21:02:07
【问题描述】:
我想了解 JIT 内联有多普遍。
假设在我的代码中,我从 System.IO 程序集中调用某个函数,并将回调引用传递给在我的代码中实现的函数,以便从该 System.IO 函数内部调用。在我的函数中有GetCallingAssembly() 调用。因此,如果我的回调被内联到 System.IO 中,则对 GetCallingAssembly() 的调用最初在我的代码中,并且打算说“当前”方法是从内部调用的 System.IO 会说它现在是从我的代码内部调用的.
这种内联是可能的,还是 .NET 运行时程序集的处理方式不同,因此不允许将用户代码 JIT 内联到 .NET 运行时代码中?
【问题讨论】:
-
委托回调如何内联到回调调用者?我不确定这是否有意义......?我的理解是内联仅限于要调用的代码是可证明的场景 - 即静态调用或对非虚拟方法的虚拟调用。
-
@Mark Gravel:如果知道这是整个程序中回调调用者的唯一调用,为什么不能呢?
-
我怀疑这比 JIT 更加努力理解,特别是因为反射/元编程存在(意思是:新的调用者可能会在以后出现)
-
你能选择一个更奇怪的例子来作为一个程序集吗?我要说它不存在 - 然后我发现它确实存在于 v4.0 下,但据我所知,它纯粹将类型转发回 mscorlib - 到目前为止据我所知,这些类型一直存在于 mscorlib 中。嗯。
标签: c# .net reflection jit