2017-08-17 160 views
2

我很好奇.NET Native如何工作。通常,当在托管代码中使用WinRT类时,通过RCW调用它们,由于托管和非托管代码之间的互操作性,会产生一些开销。我想知道当使用.NET Native编译托管代码时是否存在理论上相同的开销?.NET Native和RCW开销

回答

4

使用WinRT的.NET本机互操作与使用CoreCLR或完整框架运行的结构具有相同的结构。这是因为你有无法避免的开销,以确保各种对象的内存在跨越边界时被正确跟踪。由于您在任何.NET运行时所针对的GC都需要跟踪,所以总会有不可简化的事情。

也就是说,为基于.NET Native应用程序生成的互操作代码将具有提前生成的好处。这意味着它可以通过属于C++编译器的相同程序优化器进行优化,因此您将获得Microsoft可提供的最佳汇编代码。

(披露:我在.NET Native运行时和编译器团队工作)