.NET Native 和 RCW 开销

.NET Native and RCW overhead

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

.NET Native 与 WinRT 的互操作与 运行 CoreCLR 或完整框架具有相同的结构。这是因为您有不可避免的开销,以确保在跨边界传递各种对象时正确跟踪它们的内存。由于 GC 在您定位的任何 .NET 运行时中,总会有不可简化的事情需要跟踪。

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

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