Will C# inline methods that are declared in interfaces?

ⅰ亾dé卋堺 提交于 2019-12-22 07:57:08

问题


If I have an interface:

 interface IMyInterface
 {
    void DoSomething();
 }

And an implementing class:

 class MyClass : IMyInterface
 {
     public void DoSomething()
     {

     }
 }

Is DoSomething a candidate for inlining? I'd expect "no" because if it's an interface then the object may be cast as a IMyInterface, so the actual method being called is unknown. But then the fact that it's not marked as virtual implies it may not be on the vtable, so if the object is cast as MyClass, then maybe it could be inlined?


回答1:


If you call DoSomething directly then it will be a candidate for inlining (depending on whether the method meets the other inlining criteria relating to size etc).

If you call DoSomething via the interface then it will not be inlined. The indirection provided by the interface results in a virtual call requiring a vtable lookup so the JIT compiler is unable to inline it since the actual callsite is only resolved at runtime.



来源:https://stackoverflow.com/questions/22005700/will-c-sharp-inline-methods-that-are-declared-in-interfaces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!