为提高 Bing.com 搜索引擎的性能,微软最近宣布将 Bing.com 转换为在 .NET
Core 2.1
上运行,这是它之前基于的
.NET Framework 的升级版。

一年一度的 .NET 开发者盛会 .NET Conf 2019 在昨日(举办时间为
9.23-9.25)正式开始了。大会第一天最重磅也是最激动人心的消息莫过于 .NET
Core 3.0
稳定版
的发布。.NET
项目管理总监 Scott Hunter
在大会宣布了这则消息,并在主题演讲环节围绕 .NET Core
3.0 的新特性和社区展开了介绍。

迁移的消息由 Bing.com 开发团队的 Mukul Sabharwal 近日在 The .NET Blog
上发布,“推动 Bing.com 采用 .NET Core
的主要原因是性能(服务器延迟)”,Sabharwal
写道,“为了实现这些改进,我们开始努力使代码在 .NET
实现中可移植。团队最开始使用 .NET Standard 1.x ,但简化的 API
接口给我们的代码迁移带来了许多兼容问题。随着 .NET Standard 2.0 回归的
20,000 多个 API ,情况发生了变化,我们开始启动迁移测试。”

图片 1

据 Mukul Sabharwal 介绍,在将 Bing 搜索引擎迁移到 .NET Core 2.1
之后,内部服务延迟降低了 34% 。.NET Core 2.1
中的多项改进带来了大量的性能改进,包括 string.Equals 和 string.IndexOf /
LastIndexOf 的矢量化,它们提高了 HTML
渲染和操作等字符串繁重工作负载的性能。另外,EqualityComparer <T>
.Default 的去虚拟化支持,提升了字典性能;并发 GC
的写入监视,降低了应用的 CPU 使用率。

.NET Conf 2019 直播地址:

Sabharwal 还写道,.NET Core 2.1 为 .NET 库生态系统带来了 Brotli
压缩算法支持,Bing.com 将使用 Brotli 动态压缩内容以提高性能。

作为一个大版本更新,.NET Core 3.0 引入了大量改进和新特性,例如新增加的
Windows Forms 和 WPF、新的 JSON API、对 ARM64
架构的支持,以及全面提升的性能。对了,C# 8 也是 .NET Core 3.0
本次更新的一部分,其中包括可空引用类型(nullable)、异步流(Async Streams)和更多的模式。

图片 2

除了 C# 8,.NET Core 3.0 的更新内容还包括 F#
4.7,此版本主要是对语法进行改进,并将目标平台升级至面向 .NET Standard
2.0。

Sabharwal 表示,“与 .NET 团队的密切合作,让我们对 Bing
的未来更加期待。.NET
核心团队也很兴奋,因为我们提供了大量的功能测试和额外的代码库来测量实际的性能提升。我们致力于为用户提供更快速的搜索结果,让开发人员使用最新的软件和工具。”

.NET 团队表示 .NET Core 3.0
会兼容之前的版本,所以大家现在就可以将项目升级至 .NET Core 3.0。

(文/开源中国)    

下载地址

  • .NET Core 3.0, for Windows, macOS, and
    Linux
  • .NET Core 3.0 SDK and
    Runtime
  • Snap 安装器
  • Docker 镜像

.NET Core 3.0 的一些“新料”

在深入探究 .NET Core 3.0
的所有新功能之前,先来看看一些重要的改进,其中提及到了 C# 8、F#
4.7、.NET Standard 2.1、在其他发行版上的支持情况等。

  • 在 .NET Core 3.0
    稳定版发布前,它已在 dot.net 和 Bing.com 这两个网站上运行了数月,并已通过严格的测试。微软的团队也将很快在生产环境中将工作负载部署到 .NET
    Core 3.0 上
  • 许多组件的性能都获得了巨大提升,详情可查看介绍 .NET Core 3.0
    性能改进的内容。
  • C# 8 增加了异步流(async
    streams)、范围类型和索引类型(range/index)、更多的模式以及可空引用类型。可空引用类型主要用于帮助我们处理无处不在的空引用异常(NullReferenceException),另外,框架库的底层已被注释,编译器会分析代码流,因此我们能查看null值是否可以将其用于当前位置。
  • F#
    4.7 主要是通过使用隐式的yield表达式来简化一些操作,以及语法。此外还提供了对LangVersion的支持、新增nameof关键字,和处于预览阶段的静态类。F#
    核心库的目标平台为 .NET Standard
    2.0,详情点此了解。
  • .NET Standard
    2.1 增加了可以在代码中使用的类型集,它们也可同时用于
    .NET Core 和 Xamarin。
  • .NET Core 现在已为 Windows
    桌面应用
    提供支持同时支持 Windows
    Forms 和 WPF(已开源)。WPF
    设计器已属于 Visual Studio 2019 16.3 的一部分。Windows Forms
    设计器则仍处于预览阶段,可从 VSIX
    进行下载。
  • .NET Core
    应用现在默认情况下就具有可执行文件
    。在之前的版本中,需要通过dotnet命令来启动应用,如dotnet myapp.dll。不过从这个版本开始,我们可以使用特定于应用程序的可执行文件(例如 myapp./myapp, )来启动应用程序,具体取决于操作系统。
  • 新增高性能的 JSON
    API
    ,用于读取器/写入器、对象模型和序列化方案。这些 API
    基于Span<T>从头开始构建,使用 UTF8 来替代
    UTF16(如 string),另外由于这些 API
    使用了最小化的内存分配,因此带来了更好的性能,减少了垃圾回收器的工作。详情请查看 The
    future of JSON in .NET Core
    3.0。
  • 默认情况下,垃圾回收器使用更少的内存。对于许多应用程序托管在同一服务器上的情况,此改进非常有用。此外,新版本中
    GC 能更好地利用具有 64 核(或大于)的机器的核心数量。
  • .NET Core 强化了对 Docker 的支持,以使 .NET
    应用程序在容器中能按预期且有效地运行。当容器被配置为有限的内存或 CPU
    时,垃圾回收器和线程池会更好地进行适应已提供最具优化效果的运行方式。.NET
    Core 的 Docker 镜像体积也更小 —— 尤其是 SDK 镜像。
  • 支持 Raspberry Pi 和 ARM 芯片,以助力 IoT 开发。其中包括远程
    Visual Studio 调试器。这就意味着我们可以使用新的 GPIO API
    来部署可监听传感器的应用程序,并在显示器上打印消息或图像。ASP.NET
    可用于将数据暴露为 API,或作为一个在 IoT 设备启用配置的站点。
  • .NET Core 3.0 会被 11 月发布的 .NET Core 3.1 取代,因为后者才是
    LTS
    版本
    (至少会获得三年的技术支持),不过官方还是建议大家先升级到 .NET
    Core 3.0,然后再升级到 3.1,这样过渡起来更方便。
  • .NET Core 2.2 将于今年 12.23 到达 EOL 阶段。查看 .NET Core
    support
    policy。
  • .经过与 Red Hat 的多年合作,.NET Core 3.0 将随 RHEL 8 在 Red Hat
    Application Streams 中一起提供。
  • Visual Studio 用户如需在 Windows 上使用 .NET Core 3.0,需要升级至
    Visual Studio 2019 16.3。
  • Visual Studio 用户如需在 macOS 上使用 .NET Core 3.0,需要升级至
    Visual Studio for Mac 8.3。
  • Visual Studio Code 用户则需要使用最新版本的 C#
    扩展,以确保最新的方案能够正常工作,包括针对 .NET Core 3.0
    的目标平台。
  • .NET Core 3.0 的 Azure App Service 部署目前正在进行中。
  • .NET Core 3.0 的 Azure Dev Ops 部署即将推出。

.NET Core 3.0 支持的平台

  • Alpine: 3.9+
  • Debian: 9+
  • openSUSE: 42.3+
  • Fedora: 26+
  • Ubuntu: 16.04+
  • RHEL: 6+
  • SLES: 12+
  • macOS: 10.13+
  • Windows Client: 7, 8.1, 10 (1607+)
  • Windows Server: 2012 R2 SP1+

要注意的是,Windows Forms 和 WPF 应用仅支持在 Windows 上运行。

对芯片的支持情况如下:

  • x64 on Windows, macOS, and Linux
  • x86 on Windows
  • ARM32 on Windows and Linux
  • ARM64 on Linux (kernel 4.14+)

注意:请确保 .NET Core 3.0 在 ARM64 上的部署使用 Linux Kernel 4.14
或更高版本。例如,Ubuntu 18.04 能满足此要求,但 16.04 却不满足。

相关链接

  • .NET Core 3.0 release
    notes
  • .NET Core 2.2 -> 3.0 API diff
  • .NET Core 3.0 contributor
    list
  • GitHub release
  • GitHub issue for .NET Core 3.0
    issues

(文/开源中国)