インライン化されていないメソッドに依存するコードがいくつかあります:
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が内部であり、プロキシに置き換えられる可能性がないことを検出しますか?