我很好奇.NET Native的工作原理。通常,在托管代码中使用WinRT类时,它们会通过RCW调用,由于托管代码和非托管代码之间的互操作而产生一些开销。我想知道在使用.NET Native编译托管代码时理论上是否存在相同的开销?
答案 0 :(得分:4)
与WinRT的.NET Native interop与使用CoreCLR或完整框架运行的结构相同。这是因为你有一个不可避免的开销,即确保各种对象的内存在跨越边界时被正确地跟踪。由于你在目标的任何.NET运行时使用GC,总会有一些不可简化的东西需要跟踪。
也就是说,为基于.NET Native的应用程序生成的互操作代码将具有提前生成的好处。这意味着它可以通过作为C ++编译器一部分的相同程序优化器进行优化,因此您将获得Microsoft可以提供的最佳汇编代码。
(披露:我在.NET Native运行时和编译器团队工作)