.NET Core 2.1改进了性能,并提供了新的部署选项
jopen 6年前
<p style="text-align: center;"><img src="http://static.open-open.com/news/uploadImg/20180609/20180609113456_790.png" /></p> <p>微软正式发布了面向所有平台的 .NET Core 2.1。微软计划长期支持这个版本,但据来自微软的 Rich Lander <a href="/misc/goto?guid=4959013504270828865">介绍</a>,官方还没有确定。Lander 表示,在完成之前,该版本新增了许多小的更新。一旦正式确定,这个版本将获得为期三年的 LTS。Lander 指出,对于所有开发中的 .NET Core 应用程序,编程人员应该现在就着手切换到 2.1。</p> <p>切换到 2.1 有什么好处?除了很快就可以确定的 LTS 外,2.1 还提供了 Ubuntu 18.04,、Alpine Linux 和 ARM32 支持。它还添加了自包含应用程序发布,并改进了性能。</p> <p>在考虑性能提升时应该注意,这里的性能提升是指,与 .NET Core 2.0 相比,2.1 的增量构建性能的提升。同时,2.1 版本还增加了一个全新的类 SocketsHttpHandler,这是 HttpClient 的 C# 实现。SocketsHttpHandler 比之前的实现要快许多,并且提供了一致的跨平台行为。</p> <p>来自微软的 Stephen Toub <a href="/misc/goto?guid=4959013504398072044">详细介绍</a>了 2.1 版本的运行时性能提升。其中有些提升来自新增的 System.Span 及相关类型。.NET Core 2.1 使用的 Just-In-Time(JIT)编译器也做了一些修改。值得一提的补充是增加了利用分层编译的能力。在这个场景下,JIT 编译器会尽快生成最小优化的可执行文件。完成之后,JIT 编译器会观测程序运行,对使用频繁的方法进行更为优化的二次编译。其理论是,如果可以的话,为什么要对可能并不怎么使用的方法进行优化?这一行为并不是默认激活的,但可以通过下面的环境变量来激活:</p> <blockquote> <code>COMPlus_TieredCompilation="1"</code> </blockquote> <p>性能提升不限于代码优化;.NET Core 团队引入了一种新的压缩标准,减少数据传输。微软使用了一种基于谷歌提供的C代码的实现,向 .NET Core 2.1 添加了 <a href="/misc/goto?guid=4958969214742970919">Brotli</a> 压缩支持。由于 Brotli 得到了许多 Web 浏览器和 Web 服务器的广泛支持,所以 .NET Core 提供对这项技术的支持是非常有用的。</p> <p>最后,.NET Core 2.1 支持<a href="/misc/goto?guid=4959013504585534491">自包含部署</a>(SCD)。这让开发者生成的应用程序的 Release 构建中可以包含所有执行时需要的 .NET Core 运行时文件。然而,与平常的构建相比,这会占用更多的磁盘空间,因此,它允许开发人员指定应用程序运行的平台和使用的 .NET Core 版本。</p> <p>微软已经提供了 .NET Core 2.1 的<a href="/misc/goto?guid=4959013504713573766">完整发布说明</a>及所有支持平台的<a href="/misc/goto?guid=4959013504837720542">下载</a>(Windows、macOS 和 Linux)。</p> <p>来自: <a href="/misc/goto?guid=4959013504963513344" id="link_source2">InfoQ</a></p>