.NET Native 和 RCW 开销

标签 .net uwp windows-runtime .net-native rcw

我很好奇 .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/

相关文章:

c# - ArrayOfXElement 到 C# 中的数据集

c# - 启动 MvvmCross Uwp 应用程序时出现异常 : "System.AccessViolationException: Attempted to read or write protected memory"

c# - 如何在 WinRT 中获取类的属性

c# - 如何从 RGB 代码中获取画笔?

.net - 当用户在其 .NET 安装中选择 "Repair"时,幕后发生了什么?

c# - 为什么在将枚举转换为整数失败时我没有得到 InvalidCastException?

.net - Linq to SQL vs Entity Framework,微软支持

c# - UWP 中的 ListView 在 INotifyCollectionChanged 报告批量更改时出现意外行为

c# - 为什么 Code Contracts 声称此代码为 "Ensures is false"?

与 .AsInputStream() 转换流一起使用时的 C# DataReader 问题