.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 。
原文英文链接: Microsoft Speeds Up Windows Store Apps with .NET Native
评论