2

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

4

1 回答 1

4

.NET Native 与 WinRT 的互操作与使用 CoreCLR 或完整框架运行的结构相同。这是因为当各种对象越过边界时,您必须确保正确跟踪各种对象的内存,这是不可避免的开销。由于您所针对的任何 .NET 运行时中的 GC,总会有一些不可约的事情需要跟踪。

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

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

于 2017-08-17T21:50:18.733 回答