[情报] 微软释出最新.NET Core 3.0预览版,更新

楼主: name2name2 (yang~hi)   2019-06-17 23:36:45
微软释出最新.NET Core 3.0预览版,更新能加速应用程式加载的R2R格式
2019-06-17发表
https://www.ithome.com.tw/news/131288
R2R二进制格式虽然会让程式档案容量比较大,但是却能让执行使用较少的内存量且载
入速度较快
微软释出了最新的.NET Core 3.0第6预览版,更新了能够加速程式加载速度的ReadyToRun
(R2R)格式,以及可以缩减应用程式大小的组译连结(Assembly Linking)工具IL
linker。
.NET Core 3.0让开发者可以把.NET Core用程式编译成为R2R格式,以缩短启动的时间,
微软提到,R2R是一种AOT(Ahead-Of-Time)编译的形式,其二进制档案能够减少JIT在载
入应用程式需要的工作量,藉以提高加载的效能。
由于R2R二进制档案包含了类似JIT所产生的原生码,因此能够减少JIT的工作给予执行缓
冲空间,不过也因为R2R包含了一些中介语言程式码,因此产生的档案相对来说也比较大
,是一个启动效能与档案大小的取舍。微软给出了实验资料,只包含中介语言的应用程式
,档案大小为150MB,内存使用量为69.1MB,而启动时间为1.9秒,但使用ReadyToRun格
式的相同应用程式,虽然档案略大为156MB,但是内存使用量只有55.7MB,而且启动速
度只要1.3秒。
不过目前R2R仍有许多限制,R2R现在仅支援自包含(Self-contained)应用程式,在之后
的预览版才会开始支援与框架相依的应用程式。.NET Core 3.0 SDK可以设定排除特定应
用程式,以免被编译成为R2R,微软提到,部分应用程式不需要最佳化效能,不编译成R2R
反而比较省空间。
.NET Core 3.0开始支持R2R,但R2R并不向后支援,因此较旧的.NET Core版本无法使用,
另外,开发者只能编译函式库成R2R,以作为应用程式的一部分,目前还不能作为NuGet套
件交付,微软表示,这项功能要依使用者回馈决定是否要支援。而R2R现在也不支援跨平
台编译,在Windows x64环境只能编译Windows ARM32、ARM64以及x86映象档,而在Linux
x64只能编译Linux ARM32和ARM64映像档。
除了R2R的更新,微软提到,.NET Core 3.0还提供了一个特别组译连结工具IL linker,
可以透过分析中介语言并删减用不到的组译语言,确保自包含应用程式仅包含实际需要的
程式码,而这能够显著的降低某些应用程式的大小,微软提到,通常小型控制台应用程式
可以减少最多,因为这些工具使用较小的框架子集,可以修剪的幅度比较大。微软的实验
资料显示,对于最基本helloworld应用程式,可以从原本的68MB减少到大约28MB。
而使用映射或是相关动态功能的应用程式或框架,组译连结工具的修剪工作通常会失败,
因为IL linker不认识这类动态行为,并且无法决定在Runtime的时候需要使用的框架类型

IL linker与ReadToRun编译器可以用在同一个应用程式,微软表示,正常情况是IL
linker会让应用程式变小,但是ReadyToRun编译器又为让应用程式变大,但是效能会大幅
提升,开发者可以在各种配置中进行测试,了解这些工具选项产生的影响。

Links booklink

Contact Us: admin [ a t ] ucptt.com