加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – .Net 4内联MarshalByRefObject方法吗?

发布时间:2020-12-15 07:50:03 所属栏目:百科 来源:网络整理
导读:我有一些代码依赖于没有内联的方法: internal class MyClass : BaseClass{ // should not be inlined public void DoSomething(int id) { base.Execute(id); }}public abstract class BaseClass : MarshallByRefObject{ [MethodImpl(MethodImplOptions.NoIn
我有一些代码依赖于没有内联的方法:
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来实现你想要的.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读