微软通过.NET Native为Windows Store应用提速

jopen 10年前

  英文链接:Microsoft Speeds Up Windows Store Apps with .NET Native

  .NET Native 是微软的一次尝试,旨在降低 Windows Store 应用的启动时间和内存占用。

  自从去年 11 月份,有人发现 Windows Store 应用的启动速度有了大幅提高后,对该项目的猜测就已经开始了。在微软内部,.NET Native 叫做“项目N”,它使用微软 C++ 基础设施,将托管代码预编译为原生代码,从而大幅提升 .NET 应用的性能。这项技术与 NGen(Native Image Generator)或为 Store 应用进行动态编译是不同的。

  .NET Native 工具链最初生成 MSIL,然后由 C++ 优化器处理并生成 MDIL(依赖于机器的中间语言),.NET Native 团队的项目经理 Mani Ramaswamy 这样说道。他在 Channel 9 的访谈中提供了很多技术细节。在该访谈中,开发主管 Shawn Farkas 介绍,原生应用会静态地链接到只有几百 KB 大小的 Mrt100.dll。Mrt100.dll 代表一个最小化的 CLR,为静态编译进行了重构和优化。因此,应用程序启动时将运行于这个最小化的 CLR 之上,不会加载整个 .NET 运行时,不会涉及任何 JIT 编译。

  应用程序仍然可以使用 dynamic 来访问在运行时才能决定其类型的对象。Ramaswamy 说,这是在代码优化阶段,保留所有可能在运行时访问的类型时实现的。此外,仍然还可以使用标准的后台垃圾回收。

  这些优化将应用的启动时间缩短到原来的 60%。.NET Native 目前为预览版,并且面向的是 Windows Store 应用,但 .NET Native 团队希望将范围扩大到普通的 .NET 桌面应用。

  对于 .NET 开发者来说,没有什么改变。在应用程序级别没有引入抽象机,整个开发调试的体验也保持一致。得到改变的是构建,需要为特殊的硬件平台生成特殊的构建版本(目前已经支持 ARM 和 x86-64bit,x86-32bit 也即将支持)。优化后,构建时间可能要比原来多1-2 分钟。

  目前并不是一切都十分顺利。MSDN 有一节专门介绍用 .NET Native 编译应用程序,其中一个页面介绍将应用迁移到 .NET Native。两者在以下方面存在一些差别:运行时、处理动态编程和反射、大量不支持的场景和 API 以及 Visual Studio。

  要想使用原生代码,必须安装 Visual Studio 2013 Update 2 RC 和.NET Native SDK

来自: InfoQ