据微软工程师 Mukul Sabharwal 介绍,在将微软搜索引擎必应迁移到.NET Core 2.1 之后,内部服务延迟降低了 34% ,这主要归功于.NET 社区贡献的改进。
按照 Sabharwal 的说法,.NET Core 的多项改进贡献了大部分的性能提升,包括字符串相等矢量化、使用新的 Span<T>
类型的 string.IndexOf/LastIndexOf ,它们加速了 HTML 渲染和操作; EqualityComparer.Default 去虚拟化,这提升了字典性能;并发 GC 写监视,这降低了 CPU 使用;还有其他的特性。
如上所述,大部分改进都是由.NET 社区贡献的,Sabharwal 指出,虽然许多 GitHub pull request 来自微软员工。据 Sabharwal 介绍,有两个关键因素使得必应可以迁移到.NET Core 2.1。一个是支持 ReadyToRun 镜像,这使得 JIT 编译变成了一个预部署步骤。没有 ReadyToRun 镜像,所有代码在它要在上面运行的每一台机器上都应该 JIT 编译,由于支撑必应的机器数量众多,所以这会显著降低服务能力。使用.NET Core 的 crossgen 工具,就可以在微软实验室中对应用程序进行预编译,然后部署镜像。第二个关键因素是.NET Standard 2.0 ,一个超过 32K API 的集合,这可以帮助开发人员确保他们的代码可以在多个平台上轻松地移植到.NET Core 2.1。
最后,Sabharwal 强调了使用 xcopy 从他们的持续集成管道部署必应应用程序中的.NET Core 运行时的重要性。这才使得必应在.NET Core 2.1 正式发布仅两天之后就过渡到了.NET Core 2.1。
正如 InfoQ 在.NET Core 2.1 发布时所报道的那样,.NET Core 2.1 其中一个最大的卖点就是性能提升,以及采用自包含部署形式的新部署选项。在性能方面,最引人注意的是,.NET Core 2.1 带来了对新类型 System.Span<T>
的支持,该特性稍后也添加到了 F# 4.5 中。此外,JIT 编译器有许多优化,包括上面列出的这些。想要深入了解更多有关.NET Core 2.1 性能改进的信息,请查阅微软工程师 Stephen Toub 的博客。
查看英文原文: Microsoft Bing Gets Performance Boost from .NET Core 2.1
评论 1 条评论