.Net 4 内联 MarshalByRefObject 方法

本文关键字:方法 MarshalByRefObject 内联 Net | 更新日期: 2023-09-27 18:20:41

我有一些代码依赖于未内联的方法:

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 是内部的并且没有机会被代理替换?

.Net 4 内联 MarshalByRefObject 方法

这里的评论者建议你还需要指定NoOptimisation来实现你想要的。

http://connect.microsoft.com/VisualStudio/feedback/details/162364/methodimpl-methodimploptions-noinlineing-not't-work-correct-on-x64