【发布时间】:2014-04-04 16:19:19
【问题描述】:
今天我在MSDN 上阅读了一篇关于新 .Net Native 的文章。
“使用 .NET Native 的 Windows 应用商店应用程序启动速度提高了 60%,并且具有 更小的内存占用。我们的第一个版本是开发人员 允许您使用此新功能开发和测试应用程序的预览版 编译器。此 .NET Native 预览版为您提供 C++ 的性能与 C# 的生产力”。
当然,这真的很有趣,但是如果 .Net Native 是一个新的编译器,它可以提供良好的性能,那么为什么我们需要使用 RyuJIT。这个新的 .Net Native 是什么?新的 .Net Native 和 RyuJIT 有什么区别,微软也将编译器发布为一项名为 Roslyn 的服务。那么 Roslyn 如何支持这个新的 .Net Native。
【问题讨论】:
-
在它变得普遍适用之前还有 很多 工作要做。特别是对于桌面应用程序,还有一些非常讨厌的问题有待解决。现在还不清楚他们是否能解决这些问题。我怀疑商店风格的应用打包需要放在第一位。
-
哦,伙计,现在我们被安排完成您的工作并在外部站点上查找信息?来吧 - 这不是一个“为我做研究,我在 google fu 失败”的网站。
-
这个问题似乎是题外话,因为它是关于最近的产品公告,不太可能吸引知情的答案。
-
Roslyn将代码编译为 IL。RyuJIT不同,它在运行时将 IL 编译为机器码。它是对现有 x64 JIT 的改进。.NET Native是最小的 CLR 运行时。编译技术包括首先将代码编译为 IL(例如通过 Roslyn),然后在运行之前将其编译为机器代码(使用 VC++ 编译器)。好处是更快的启动、执行时间等,但编译需要更长的时间。 .NET Native 应用程序不是跨平台的。有基于 LLVM 的LLILC,它旨在像 .NET Native 一样提前将 IL 编译为机器代码,但也可以跨平台。 -
粗略地说,
Roslyn= C# 到 IL。RyuJIT= IL 到 MC,JIT。.NET Native= IL 到 MC、AOT。LLILC= IL 到 MC、AOT(未来)、跨平台。 JIT 表示运行期间,AOT 表示运行前。项目方面,UWP 应用(在发布模式下)=Roslyn+.NET Native。其他 =Roslyn+RyuJIT。 This msdn blog 给了一张好照片。
标签: c# .net roslyn .net-framework-version ryujit