微软持续提升NuGet组件还原性能

微软持续改进开源软件组件管理系统NuGet的性能,在Visual Studio过去5个发布版本以来,NuGet在组件恢复、管理项目依赖性和浏览组件等操作速度,都获得显著的改进,尤其是在大型解决方案的组件还原,更是有感提升。

在Visual Studio 16.4和16.9之间,微软特别针对NuGet还原.NET项目组件的使用场景进行改善。微软解释,组件还原动作可以确保项目在构建之前,所有的文件和packages.config中声明的相依项目都正确可用,而这表示NuGet需要确认所有需要用到的组件,都在全局组件文件夹或是本地组件缓存中可用。

在NuGet中有两种还原类型,分为一般还原以及无操作还原,一般还原是指需要执行组件下载、组件安装以及相依关系图解析操作的还原,而无操作还原则是用来维持项目状态更新的一种还原方法,大多数情况,用户都采用无操作还原。

微软在最近5个Visual Studio发布版本,针对拥有50个项目的大型解决方案,改进其无操作还原性能,使得p95、p75和p50的性能都有大幅度的改进,越高的百分比代表解决方案中有越多的项目。p95在Visual Studio 16.8版本的无操作还原,性能已经有大幅度的降低,从15.9版需要接近3,500毫秒,到现在16.8已经仅需要约1,250毫秒。

而这些改进也不只大型解决方案受益,小型和中型的解决方案(下图)的还原性能也同样获得改进。此外,微软通过对还原的组件进行分组,来提高Visual Studio解决方案加载的还原性能,而这使得超过150个项目的解决方案,其加载性能产生重大变化,像是OrchardCore项目在NuGet还原性能改进更新之后,花费的时间从73秒下降至27秒。

此外,微软还改进持续集成场景,包括NuGet CLI、dotnet CLI和MSBuild,在没有任何组件下载的情况,组件还原的性能也都获得提升,在过去5个NuGet Client工具版本中,50个项目以上的大型解决方案,还原性能改善超过40%。