繁体   English   中英

分析编译时间

[英]Profiling compilation time

我有一个 C++ 代码,我正在使用 VC7 编译它,构建它需要很多时间。 有什么方法可以分析它并找出构建它需要时间的原因吗?

在 Visual Studio 2008 中,有一个用于打开构建计时的设置。 它可能也存在于 VC7 中......

Tools / Options / Projects and Solutions / VC++ Project Settings / Build Timing: Yes

这适用于不使用 MSBuild 的 C++ 项目(从 VS2008 开始)。 对于基于 MSBuild 的项目(例如 C#),您希望增加详细程度:

Tools / Options / Projects and Solutions / Build and Run / MSBuild project build output verbosity

默认情况下,它设置为“最小”。

如果代码是模板密集型的,那么您可以尝试进行模板实例化分析。 Steven Watanabe 想出了分析器,如果我没记错的话,它应该可以与 VS 一起使用(不知道版本)。

源代码在网络上吗? 这有时会大大减慢编译速度。

最近,Microsoft 的C++ Build Insights SDK为其vcperf引入了一个选项/timetrace ,它允许您在任何基于铬的浏览器中以火焰图的形式分析您的构建并可视化特定组件的构建时间。

假设您已经下载并安装了vcperf ,您需要:

  1. 通过执行启动它的会话
vcperf /start SessionName
  1. 运行您的构建(事件由 vcperf 在系统范围内捕获)
  2. 停止会话
vcperf /stop SessionName /timetrace output.json

您现在可以运行基于铬的浏览器,输入<browser_name>://tracing ,(例如chrome://tracing )并加载output.json文件以进行可视化。

此处获取的示例可视化

如果您的代码大量使用模板,您可能会对Templight感兴趣,这是由匈牙利研究团队开发的用于调试和分析 C++ 模板元程序的工具(论文)。 看起来很有前途,但我不确定该工具是否可供下载...

我的猜测是很难从分析中获得有用的结果。 您可以查看每个 .obj 文件的创建时间并检查是否有任何文件特别慢,但我怀疑情况是否如此。

您是否浏览过编译器选项(例如预编译头文件)以查看其提供了哪些改进? 同样,关闭不需要的优化器可以显着加快构建速度。 我的建议是花一些时间尝试一些“假设”场景。

如果可能,您可以在您的情况下尝试#include 所有 .cpp 文件到单个编译单元中的技巧,只是为了检查是否有很多文件和许多包含的开销。

使用预编译头

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM