VisualStudio 2013预览中C++ IDE性能的改进

我叫李绍。我是VC++团队的高级测试软件设计工程师。在这个博客中,我想分享我们在VS 2013预览中做的性能改进,以改进C++ IDE和构建系统。

null

性能是软件质量的重要组成部分。在过去的两个版本中,我们在解决方案加载、IntelliSense和代码导航等方面取得了显著的性能改进。在VS 2013中,我们将性能工作重点放在了其他一些关键场景上,如配置切换、响应能力和构建吞吐量。我们还改进了监控真实世界性能的方法,这就是所谓的性能遥测。

基于C++开发人员的反馈,我们将重点放在配置切换上的性能调整工作上。我们使用了一个包含800个项目的真实应用程序作为提高性能的基准解决方案。我们发现,造成配置切换时间的主要因素之一与解决方案导航器中文件结构的复杂性有关。我们有一些低效的方法来重新计算文件扩展状态和过滤器—通过关注这些代码,再加上一些额外的错误,我们在配置切换时间上取得了一些非常显著的性能改进。以下是此实际应用程序性能改进前后的数据:

图片[1]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

图1:C++配置开关操作中的性能改进

对于此解决方案:

  • 与2012年相比,首次交换机配置时间大约缩短了75%
  • 随后的交换机配置时间从一分半钟缩短到不到半秒

除了性能调整之外,我们还添加了遥测功能,以便我们可以找到其他机会来提高所有解决方案的性能。以下是用于切换配置的遥测数据快照:

图片[2]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

图2:配置切换的遥测数据

X轴是以毫秒为单位执行配置切换操作的时间。左侧的Y轴是每个铲斗中出现的编号。右侧的Y轴是每个铲斗中的累积百分比。

从遥测数据中,我们可以看到,配置切换的平均运行时间现在不到100毫秒。超过6秒的实例不到10%。如果您仍然觉得VisualStudio2013配置切换性能达不到您的期望,请使用提供复制和配置文件来帮助我们 Visual Studio 2013预览反馈工具 .

我们为提高性能而进行的一项主要基础设施投资是将C++项目系统移动到多线程模型。这为项目系统中的大多数代码在任何线程上运行提供了灵活性,允许并发执行和更好的响应性。这项工作还减少了挂起的来源。例如,在VS2012中,一个单独的项目被加载到大约3个块中,每个块都发生在包含I/O的UI上。在VS2013中,使用多线程工作,我们可以完全脱离主线程完成大部分工作(包括I/O)。保留在UI线程上的部分是以更小的块执行的,因此响应性比以前得到了更多的保证。我的同事安德鲁阿诺特将在未来的博客文章中更详细地讨论这项工作。

对于编辑体验,我们现在有了遥测基础设施来帮助我们监控真实世界的输入响应。图3显示了VS2013中用于输入响应性的遥测数据 埃里克·诺克斯的博客 在VS 2012上发布。与VS 2012相比,VS 2013与VS 2012一致,98.8%毫秒的C++击键在50ms下进行处理(图3。A)。在>50ms的范围内,我们还看到,与2012年相比,更多的数据点从100-250ms(与2012年的0.48%相比,与2013年的0.30%相比)的存储桶转移到50-100ms(与2012年的0.37%相比,与2013年的0.57%)的存储桶(图3.B)。VS 2013预览C++类型中值响应率为15MS(图3。C)。

图片[3]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库 图片[4]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

(一)                                                                                            ((二)

图片[5]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

(三)

图3:VS 2013 C++编辑器打字响应遥测数据

除了输入响应性,我们还修复了各种性能错误,包括可能导致O(n)错误的问题 2 )保存签入源代码管理的文件时的算法。这可以极大地改善处理大型应用程序时的体验。

对于VS2013预览版,我们进行了各种修复以提高编译器吞吐量。根据我们的内部测量,在不使用多处理器编译标志(non/MP情况)的情况下,我们将编译器吞吐量提高了10%(图4.A)。

对于那些正在使用MP编译开关的用户,我们还降低了编译器开销,并提高了具有许多内核的机器上的总体构建吞吐量。图4.B显示了在48核机器上构建大型内部应用程序时的整体改进。在本例中,与2012年相比,2013年的总体构建时间几乎缩短了一半。

图片[6]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

(一)

图片[7]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

(二)

图4:C++构建 吞吐量提高

使用WinMD引用更快地增量生成Windows应用商店应用程序

在VS 2012中,对于引用了一个或多个WinMD项目(生成WinMD作为输出的项目)的Windows应用商店应用程序,对WinMD项目源文件的更改将触发应用程序的完整生成。在VS2013中,我们做了一个修复,这样当WinMD文件没有内容更改时,WinMD的链接器时间戳不会更改。当对引用的C++ WIMD进行非内容更改时,这将加快整体构建速度。图5显示了我们的一个内部Windows应用程序的改进示例。WinMD项目中的相同更改将花费15分钟来构建,花费的时间几乎与VS 2012中构建整个解决方案的时间相同。在VS 2013中,增量构建只需一分钟。

图片[8]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

图5:C++ Windows存储应用程序增量构建吞吐量的改进

请注意,如果您将WinMD项目作为引用链的一部分进行管理,则可能看不到完整的性能改进。原因是,与C++ WiMDS不同, 托管WinMDs包含类型签名和实现,这意味着任何更改都将导致WinMD时间戳更改。我们很乐意在下面的评论部分或我们的网站上听到您的意见 用户语音 如果这个场景对你很重要的话。

正如我前面提到的,我们在上一版本的IntelliSense和代码导航(browsing)特性中进行了性能改进。为了帮助我们继续改进这些场景的性能,我们现在收集用于Intellisense/浏览操作的遥测数据,包括成员列表填充、自动完成、快速信息、参数帮助、转到定义和其他一些相关操作。图6给出了趋势数据的示例 我们现在可以使用。例如,在下面的趋势数据中,我们可以看到自动完成、成员列表和转到定义的平均运行时间分别为105ms、175ms和226ms。大多数(90%)的自动完成和成员列表操作现在在200毫秒内完成。我们将使用这些数据来确定我们投资的重点,以便随着时间的推移提高性能;您可以选择加入我们的客户体验改善计划(请参阅 此博客帖子 更多细节)

图片[9]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

(一)

图片[10]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

(二)

图片[11]-VisualStudio 2013预览中C++ IDE性能的改进-yiteyi-C++库

(三)

图6:Intellisense和代码导航的遥测数据

以上是我们为VS2013预览版所做的重要性能改进和基础设施工作,以改进IDE并构建吞吐量体验。感谢您的持续反馈。如果您还没有这样做,请 唐洛 d VS2013预览版,并在下面的评论部分提供反馈,通过 用户语音 ,使用 VS 2013预览反馈工具 帮助我们在使用visualstudio时排定工作优先级,以改善体验。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享