繁体   English   中英

在C#中使用抽象类时,AgressiveInlining会执行任何操作吗?应将其放在何处?

[英]When using abstract classes in C#, does AgressiveInlining do anything, and where should it be placed?

假设我有一个抽象类和一个实现它的类。

public abstract class BaseClass
{
    public void Outer()
    {
        for (int i = 0; i < 1000000; i++)
        {
            Inner();
        }
    }

    protected abstract void Inner();
}

public class MyClass : BaseClass
{
    protected override void Inner()
    {
        // do stuff
    }
}

由于Outer()这么多地调用Inner()且几乎没有做其他事情,因此我希望Inner()使用[MethodImpl(MethodImplOptions.AggressiveInlining)]

public abstract class BaseClass
{
    public void Outer() // ...

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    protected abstract void Inner();
}

public class MyClass : BaseClass
{
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    protected override void Inner()
    {
        // do stuff
    }
}

此属性是否在BaseClassMyClass或两者中都存在,或者在这种情况下该属性根本不起作用?

根据Hans的评论,由于抽象类和虚拟调用的性质,不能内联抽象成员。

编辑 :根据下面的Ben的评论,这并不是所有编译器都正确,但JIT确实如此(这恰好是我的特定问题的上下文)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM