Visual Studio “15”启动更快了

[原文发表地址]: Faster Visual Studio “15” Startup

[原文发表时间]: October 10, 2016

 

正如John上周三在预览版5发布的博客中提到的,我们在这个版本中进行了大量的性能改进。这是包含Visual Studio “15” 性能改进的五部分系列的第一部分。

今天,我将向您介绍一系列我们为改进Visual Studio启动体验而进行的投入,主要包括以下方面:

  • 使用我们的新性能中心,您如何确定所使用的扩展或者工具窗口是否影响了启动、解决方案加载或代码编辑等方面的体验。当然,还有如何优化它。
  • 如何使用按需加载方法将扩展移出启动路径,优化和推迟缓存初始化,来有助于我们改善启动时间。

近年来,随着Visual Studio用户群的增长,在Visual Studio中也融合了一些合作伙伴的技术。 不幸的是, 由于这些功能在启动时会自动加载,这极大地影响了Visual Studio的启动时间。

下面是一个示例,显示了Visual Studio启动时间在启动加载扩展时,如何轻松地减慢50%。

VS-Startup-Times-with-and-without-Extensions

 

Visual Studio启动包含什么?

有三个不同的Visual Studio 启动类型:

  1. 首次启动:安装完成后第一次启动Visual Studio。 第一次启动Visual Studio比其他启动要慢得多,因为Visual Studio环境配置了各种缓存和预构建的表。
  2. 正常启动:我们将在第一次启动后,后续的Visual Studio启动,称为正常启动; 此类启动不包括调试实例,或使用命令行参数启动的实例,以及之前安装的扩展或更新的实例。80%的Visual Studio启动都属于正常的启动。
  3. 配置更改:在安装扩展或更新后发生的启动。

这些类型帮助我们识别潜在减速的根本原因,有利于进一步调查优化方案。

首次启动的改进

在Visual Studio 2015中,首次的启动包括扫描安装的组件和创建一个配置文件,初始化默认设置,获取用户登录信息,并初始化缓存,如托管扩展框架(MEF),扩展管理器,工具箱以及字体/颜色缓存。

在Visual Studio“15”中,我们已经考虑了每个步骤,以查看哪些可以延期或优化:

  • 我们尝试在Visual Studio 2015中推迟工具箱的初始化,这对于加载时间有积极的影响,于是在Visual Studio“15”中就进行了这种更改。
  • 一些缓存,如字体和颜色缓存不再在第一次启动时初始化。 我们改进了缓存配置,使我们可以推迟其初始化,而不会影响首次启动时的用户体验。
  • 通过使MEF和扩展管理器服务异步,我们现在可以在登录运行时并行初始化这些缓存。

有了所有这些变化,我们很高兴地宣布,Visual Studio“15”的启动速度比Visual Studio 2015快3倍。这是一个从我们之前的遥测获取的数据:

Duration Visual Studio 2015 Visual Studio “15”
First Launch duration (80th percentile) 215.5 sec 80.3 sec

 

正常启动的改进

Visual Studio的正常启动,至少需要初始化核心服务。 每次发布我们都会继续监控这些服务,以确保核心初始化不会变长。 除了核心服务之外,启动时间还会受到两个因素影响: 在启动时自动加载的扩展和在先前实例的窗口布局中保留的工具窗口。我们的遥测结果表明,自动加载 Microsoft和第三方的扩展项,会显著增加Visual Studio启动时间。

如上所述,我们在Visual Studio“15”中的主要重点是避免自动加载扩展,并为这些扩展提供更多选项,以便稍后再加载而不影响用户体验。作为这项工作的一部分,我们提供了以下功能:

  • 启用对Visual Studio软件包的异步加载支持
  • 扩展中间数据规则来控制自动包的加载和命令的可见性
  • 支持核心Visual Studio服务的异步查询

Xamarin和Python工具是第一个在Visual Studio“15”中采用按需加载方法。 你现在应该看到启动是相当快的。

影响启动的另一个因素是在启动时在IDE上可见的工具窗口。 这些工具窗口与之前的实例一致,并且加载这些工具窗口所增加的时间,取决于它们初始化的功能的大小; 其中一些是相当明显。我们继续专注于基于我们的遥测技术提高这种工具窗口的性能。 此外,“管理Visual Studio性能”对话框帮助您覆盖这些工具窗口的默认持久性行为。您将在下一部分中了解到有关此对话框的更多信息。

 

监控扩展和工具窗口性能

我们在最小化启动时自动加载功能的需要的同时,还在Visual Studio“15”中添加了一个功能,以帮助用户了解他们的扩展和工具窗口以及解决方案的加载和编辑等场景对启动的影响。是的,此功能会自动加载以监视Visual Studio启动时发生的情况。

当您启动Visual Studio时,对于较慢的扩展,您将收到一个相关扩展的性能对启动的影响的一次性通知。

clip_image003

在任何时候,您可以通过帮助 - >管理Visual Studio性能打开对话框,查看哪些扩展或工具窗口影响您的Visual Studio的启动,解决方案加载等。从“管理Visual Studio性能”对话框中,也可以禁用扩展。

clip_image005

与扩展一样,您可以在同一对话框中查看工具窗口对启动速度的影响。 如果工具窗口明显减慢了Visual Studio的启动速度,您也会收到通知。 您可以通过以下两个选项之一进行选择来覆盖默认持久性行为:

  • 使用默认行为; 对当前行为没有改变。 因此,如果您选择此选项,那么启动时间不会有所改进。
  • 启动时不显示窗口; 工具窗口永远不会在实例之间持续。 您可以稍后从菜单中打开它。
  • 启动时自动隐藏窗口; 如果在启动时可以看到工具窗口,则此选择将折叠其组来避免初始化工具窗口。这个选项是我最喜欢的。

clip_image007

您可以通过返回“管理Visual Studio性能”对话框并将选项更改为使用默认行为来恢复这些选项。

 

持续帮助我们

虽然这篇文章专注于启动改进,但我的同事Will Buik将在下一篇文章中谈到解决方案负载领域的重大改进。 这些更改应该允许Visual Studio在使用从Windows资源管理器中选择的解决方案打开时更快启动。

您可以在以下几个方面来帮助我们,以使Visual Studio成为更好的产品:

  • 首先,我们监控所有发布的遥测,包括预发布。 所以请下载并使用 Visual Studio“15”预览5
  • 其次,如果你是一个扩展的创造者,请继续关注; 在接下来的几周中,我们将详细介绍扩展创造者如何分析其扩展。 因为任何选择在启动时或解决方案正在打开时自动加载的扩展都会对Visual Studio的性能产生负面影响。 即将推出的指南将有助于评估Visual Studio“15”中的新功能是否可用于删除自动加载的需要或减少自动加载的影响。 对于需要自动加载的扩展,指导还将帮助衡量对启动的影响。

 

谢谢!

Selma