如何在C#中强制内联函数?

如何在C#中强制内联函数?,c#,.net,C#,.net,可能重复: 在C++中,我们可以强制。< /P> 在c#中也可以这样做吗?有时,当方法很小时,它会自动内联。但是,在c#/.Net中是否有强制内联函数呢?之类的。它不是在你的直接控制下打开的。它从未内联到IL中-它只由JIT完成 可以使用显式强制方法不内联 从.NET 4.5开始,您还可以对“请求”内联进行排序: [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Foo() { ... } 。。。但你不能强迫它。(在

可能重复:

在C++中,我们可以强制。< /P>
在c#中也可以这样做吗?有时,当方法很小时,它会自动内联。但是,在c#/.Net中是否有强制内联函数呢?

之类的。它不是在你的直接控制下打开的。它从未内联到IL中-它只由JIT完成

可以使用显式强制方法不内联

从.NET 4.5开始,您还可以对“请求”内联进行排序:

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Foo() { ... }

。。。但你不能强迫它。(在.NET 4.5之前,该枚举值不存在。例如,请参阅。)

如前所述,重复。还有,不要。JIT编译器在这方面做得非常好,并且有一个非常好的算法。如果不使用它,您将获得更好的性能。@marr75(从.NET4.0开始)内联算法非常愚蠢。它经常做出错误的决定。能够手动覆盖它们将非常好。@CodesInChaos Agree to disagree,对我来说一直都很好。在我的大多数使用中,角落案例往往需要改变数据结构,而不是进行微优化。@Eregrith讽刺地在谷歌上搜索“C#request inline”现在,这是最重要的答案。这里有一个用例供您使用:如果您内联代码检查许可证或类似的东西,那么任何黑客现在都有很多代码要删除,而不仅仅是everything调用的一个方法。很好,不知道新的枚举值。这在我的一些高性能代码中可能很有用。为什么它不提供强制内联,而只提供提示性/请求?@WDUK,因为它不能提供强制内联。在我所知道的任何语言中,内联都不能被强迫;e、 你认为递归函数应该如何内联?因此,在C语言、C++等中,程序员最能做的就是给编译器一个提示,如果可能的话,这个方法应该内联。@ ToMasFink可以想到,如果你要求一个强大的内联,它要么根本无法编译,要么产生错误的结果。这将由开发者决定何时强制和何时不强制。
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Foo() { ... }