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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With