I'm curious about how .NET Native works. Normally when using WinRT classes in managed code, they are invoked through RCW, incurring some overhead due to the interop between managed and unmanaged code. I wonder if there is theoretically the same overhead when the managed code is compiled using .NET Native?
.NET Native interop with WinRT has the same structure as running with CoreCLR or full framework. This is because you have the unavoidable overhead of ensuring the memory for various objects is tracked properly as they are handed accross the boundary. There will always be come irreducible set of things that need to be tracked because of the GC in whichever .NET runtime you're targeting.
That said, the interop code generated for a .NET Native based application will have the benefit of being generated ahead-of-time. This means that it's able to be optimized by the same program optimizer that is part of our C++ compiler so you're going to get the best assembly codegen that Microsoft can offer.
(Disclosure: I work on the .NET Native runtime and compiler team)