我有一些代码依赖于没有内联的方法:
internal class MyClass : BaseClass { // should not be inlined public void DoSomething(int id) { base.Execute(id); } } public abstract class BaseClass : MarshallByRefObject { [MethodImpl(MethodImplOptions.NoInlining)] protected void Execute(params object[] args) { // does a stack walk to find signature of calling method } }
当然,只有在未内联DoSomething方法时,这才有效.这就是基类派生自MarshallByRefObject的原因,它阻止了公共方法的内联.
它一直工作到现在,但我从.Net 4服务器得到了一个堆栈跟踪,显示堆栈行走到了DoSomething的调用者.
.Net 4内联是否更加聪明并且检测到MyClass是内部的并且没有机会被代理替换?
解决方法
这里的评论者建议你还需要指定NoOptimisation来实现你想要的.