【问题标题】:What is new .Net Native [closed]什么是新的.Net Native [关闭]
【发布时间】: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 + RyuJITThis msdn blog 给了一张好照片。

标签: c# .net roslyn .net-framework-version ryujit


【解决方案1】:

.NET Native 本身并不是 Roslyn 项目的一部分。 Roslyn 是 C# 和 VB 编译器和语言服务的重新实现。请记住,这些编译器会生成托管程序集。为了运行,它们必须被翻译成平台特定的代码。这通常通过 .NET 运行时中的 JIT 编译器完成。

.NET Native 允许您将 .NET 项目转换为类似于 NGEN 所做的本机二进制文件,但有一些重要区别。 .NET Native 使用与 NGEN 不同的本机编译器部分,通常可以生成更快、更小的代码。它还允许一种常规 .NET 应用程序不可用的静态链接。

【讨论】:

  • 所以 Roslyn 支持不适用于新的 .Net Native?
  • @VimalCK 我相信你以错误的方式思考这个问题。请记住,C# 编译器不会生成本机代码。 JIT/NGEN/.NET Native 这样做。
  • 因此可以将 Roslyn 用于 C#->IL,然后将 RyuJIT 用于 IL->Native 是否正确?
  • 好问题@AaronLS,我想是的。但也许不是一个简单的方法,也不是微软表示的方式。我认为 JIT 更适合“动态原生代码生成”(作为运行时编译器)。
  • 是不是说我们客户端不需要安装.Net Framework?
猜你喜欢
  • 2011-02-04
  • 2017-08-06
  • 2023-03-10
  • 1970-01-01
  • 2011-02-25
  • 2010-09-05
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多