7

インライン化されていないメソッドに依存するコードがいくつかあります:

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が内部であり、プロキシに置き換えられる可能性がないことを検出しますか?

4

1 に答える 1

0

ここでのコメンターは、あなたNoOptimisationが望むものを達成するためにも指定する必要があることを示唆しています。

http://connect.microsoft.com/VisualStudio/feedback/details/162364/methodimpl-methodimploptions-noinlining-doesnt-work-correctly-on-x64

于 2012-01-20T13:01:02.533 に答える