.NET JIT编译器能否内联带有特性修饰的方法?
方法内联与禁止内联的相关问题解答
带特性的方法是否通常不会被内联?
这个推测有一定合理性。多数带特性的方法都有特殊设计意图:比如[Obsolete]标记弃用、[DebuggerStepThrough]用于调试跳过、[WebMethod]标记接口方法等,这些特性本身就说明方法有特定的行为或用途,编译器一般会自动跳过对这类方法的内联优化。但这只是常规情况,不同编译器的优化策略可能存在差异,不能把它当成绝对规则。要明确禁止内联,必须用
[MethodImpl(MethodImplOptions.NoInlining)]吗?
没错,这是唯一能确保方法不被内联的可靠手段。
编译器的自动规避逻辑没有强制标准,哪怕方法带了其他特性,也没法保证100%不会被内联。如果你的代码逻辑(比如调试需求、特定的调用栈依赖)要求方法绝对不能被内联,只有显式添加这个特性,才能让所有符合.NET规范的编译器严格遵循禁止内联的要求。
内容的提问来源于stack exchange,提问作者George Vovos
相关产品推荐
相关产品推荐

