所在的位置: C++ >> C++介绍 >> 新鲜货CBuildInsights告

新鲜货CBuildInsights告

北京青春痘医院专家 http://pf.39.net/bdfyy/bdfzd/

C++项目的编译应该越来越快才对

在VisualStudio.2中,我们通过提升链接器性能来缩短工程的总体编译时间。今天,我们很高兴的引入一系列可以进一步提升编译速度的新玩意儿,我们就先叫它C++BuildInsights吧。你是否在一边吃早餐一边编译代码的时候想过:编译器现在这会儿正在那鼓捣什么呢?在C++BuildInsights中,我们可以帮助你解答上面的问题。通过整合新的工具和EventTracingforWindows(ETW),我们可以得到有关C++编译工具链工作时的一些可视化信息。通过查看这些信息,我们可以知道到底是哪些工作项目拖慢了工程的整体构建速度,并从中对症下药进行改进。

让我们开始吧

当然了,你首先需要安装VisualStudiov16.4Preview3。然后按照如下的几个步骤开始收集构建时间信息。以管理员启动VSPreview中的x64命令行程序。执行:vcperf/startMySessionName。编译的工程。执行:vcperf/stopMySessionNamemyTrace.etl。

在vcperf命令中,我们开始了一个监测会话,会话名称被指定为MySessionName。然后当执行vcperf/stop时,所有有关构建过程的性能检测信息都将会写入到myTrace.etl中。

借助ETW工具,C++BuildInsights可以收集到系统上所有正在运行的编译器和链接器。你并不需要在执行vcperf时以命令行的方式编译你的工程,你还是可以使用其他命令启动编译,甚至你直接可以使用VisualStudio进行编译。不管使用哪种方式触发编译,都可以收集到对应的信息。

使用ETW获取构建信息的另一个好处在于,你不需要在编译或者链接过程中添加额外的命令行参数,因为ETW内建在操作系统中并默认启用。所以,C++BuildInsights将可以在所有的构建系统上正常工作,不需要添加任何的额外配置。

当完成信息的收集之后,你就可以在WindowsPerformanceAnalyzer(WPA)中打开Trace文件了。这个WPA是WindowsPerformanceToolkit的一部分。有关更多关于WPA版本的信息,可以参见C++BuildInsights的文档。

图形化呈现

在接下来的部分中,我将展示一些我们在WPA中呈现出来的一些构建时间的图形化界面。如果想要对工程的构建过程有一个大概的了解,就必须要知道整个构建工程中发生了哪些事情。BuildExplorer是C++BuildInsights中的一个核心工具,主要用来呈现构建过程中的主要工序及花费的时间。你只需要从WPA中将左边的GraphExplorer面板中拖到右边的分析视图中即可。在这个分析视图中,我们可以基于这个分析视图找到潜在的并行构建问题,构建的瓶颈,以及可以更加清楚地观察到构建的时间主要集中在哪个阶段(解析,代码生成或者链接)。

更加详尽的统计分析

潜藏最深的构建时间问题通常是那些缓慢发展而来的细小问题,它们会慢慢吞噬你的构建时间,直到最后,当你发现构建的时间实在是难以接受时,才会意识到它们的存在。一个简单的例子是,相同头文件的包含在多个编译单元中。每一次头文件包含或许不会对整体的构建过程造成很大的影响,但是这个头文件和其他的编译单元一起包含的时候,问题就会出现了。C++BuildInsights可以提供详尽的统计分析来提示潜在的警告来应对此类问题。下面是一个例子,显示出在构建过程中那些消耗时间最长的头文件包含。你可以在WPA的左侧的GraphExplorer中选择文件视图来查看这个信息。

可以得到的统计信息

总结

微软啊,你真是为我等大C++程序员操碎了心呐,我是真没想到VS可以在优化我们的工程构建上下这么大的功夫,但是呢,我的工程它也不大,也就百十来万行(手动狗头),所以,这套东西,还是留给有需要的人士吧。




转载请注明:http://www.aierlanlan.com/rzfs/1234.html