C# 在方法中使用System.Reflection.MethodBase.GetCurrentMethod()是否会阻止JIT编译器内联该方法?

C# 在方法中使用System.Reflection.MethodBase.GetCurrentMethod()是否会阻止JIT编译器内联该方法?,c#,reflection,C#,Reflection,以下问题中的答案和评论提供了相互矛盾的信息 文档中也没有提到它 否,JIT编译器可以自由内联该方法 您需要将[MethodImpl(methodimpoptions.noinline)]添加到调用GetCurrentMethod()的任何方法中,以防止其内联 如果您只对方法名感兴趣,则更易于使用。我同意这一点,但可能不会阻止内联,但根据我的经验,不需要太多“复杂”的代码就可以使该方法变得不适合内联,因此我假设调用GetCurrentMethod,尽管不是一个硬停止,仍然会大大降低它被内联的可

以下问题中的答案和评论提供了相互矛盾的信息

文档中也没有提到它


否,JIT编译器可以自由内联该方法

您需要将
[MethodImpl(methodimpoptions.noinline)]
添加到调用
GetCurrentMethod()
的任何方法中,以防止其内联


如果您只对方法名感兴趣,则更易于使用。

我同意这一点,但可能不会阻止内联,但根据我的经验,不需要太多“复杂”的代码就可以使该方法变得不适合内联,因此我假设调用GetCurrentMethod,尽管不是一个硬停止,仍然会大大降低它被内联的可能性
CallerMemberNameAttribute
在引用编写代码的方法/成员方面也是正确的,即使该方法是内联的。依赖于该方法不会内联的假设会产生难以跟踪的生产错误,这些错误永远不会出现在Debugger中。你不能依赖于假设,我没说你应该这么做。我的观点是,它“可能”会降低方法内联的可能性,因为根据我的经验,添加到方法中的代码越“复杂”,内联的可能性就越小。根据我的经验,内联启发法倾向于简单的方法。