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