Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JIT内联是否可以将我的代码内联到某个.NET运行时程序集代码中?_C#_.net_Reflection_Jit - Fatal编程技术网

C# JIT内联是否可以将我的代码内联到某个.NET运行时程序集代码中?

C# JIT内联是否可以将我的代码内联到某个.NET运行时程序集代码中?,c#,.net,reflection,jit,C#,.net,Reflection,Jit,我想了解JIT内联是如何无处不在的 假设在我的代码中,我从saySystem.IO程序集中调用某个函数,并将回调引用传递给代码中实现的函数,以便从该System.IO函数内部调用该函数。在我的函数中有GetCallingAssembly()调用。因此,如果我的回调被内联到System.IO中,则对GetCallingAssembly()的调用最初在我的代码中,其目的是说“current”方法是从System内部调用的。IO将说它现在是从我的代码内部调用的 这样的内联是可能的还是.NET运行时程序

我想了解JIT内联是如何无处不在的

假设在我的代码中,我从say
System.IO
程序集中调用某个函数,并将回调引用传递给代码中实现的函数,以便从该
System.IO
函数内部调用该函数。在我的函数中有
GetCallingAssembly()
调用。因此,如果我的回调被内联到
System.IO
中,则对
GetCallingAssembly()
的调用最初在我的代码中,其目的是说“current”方法是从
System内部调用的。IO
将说它现在是从我的代码内部调用的


这样的内联是可能的还是.NET运行时程序集的处理方式不同,因此不允许将用户代码JIT内联到.NET运行时代码中?

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

委托回调如何内联到回调调用程序?我不确定这是否有意义。。。?我的理解是,内联仅限于要调用的代码是可证明的场景,即静态调用,或者对非虚拟方法的虚拟调用。@马克·格拉斯:如果知道这是整个程序中回调调用程序的唯一调用,为什么它不能呢?我想这比JIT更难理解,尤其是在反射/元编程存在的情况下(意思是:新的调用程序以后可能会存在)你能为一个装配选择一个更奇怪的例子吗?我想说它不存在——然后我发现它确实存在于v4.0下,但就我所见,它纯粹是将类型转发回mscorlib——就我所知,这些类型一直存在于mscorlib中。六羟甲基三聚氰胺六甲醚。