Visual C ++ 2008:查找链接时间慢的原因

时间:2010-05-04 16:38:58

标签: c++ visual-c++ linker

我有一个遗留的C ++项目需要花费很长时间来构建(几分钟,即使是小的增量更改),我发现大部分时间都花在链接上。

该项目已经在使用预编译头文件和增量编译。 我已启用“/ time”命令行参数,希望我能获得有关减慢链接器速度的更多详细信息,并获得以下输出:

1>Linking...
1>  MD Merge: Total time = 59.938s
1>  Generate Transitions: Total time = 0.500s
1>  MD Finalize: Total time = 7.328s
1>Pass 1: Interval #1, time = 71.718s
1>Pass 2: Interval #2, time = 8.969s
1>Final: Total time = 80.687s
1>Final: Total time = 80.953s

有没有办法获得有关这些步骤的更多详细信息? 例如,我想知道他们是否花费大部分时间链接到特定的.lib或.obj文件。

此外,是否有任何文档可以解释每个步骤的作用?

2 个答案:

答案 0 :(得分:4)

“MD Merge”步骤正在寻找并合并重复的字符串文字和其他重复数据。请注意,执行此操作所需的时间比您拥有的字符串文字数量多O(n ^ 2),因此我曾遇到类似问题,其中带有~10K字符串文字的头文件需要5分钟才能链接。

添加链接器标志/OPT:NOICF可能会有所帮助。或者,请检查为什么要折叠这么多文字。

答案 1 :(得分:1)

希望来自vs开发团队的人能够看到这个并能够发表评论,也许会发布一个链接到他们的论坛/博客并开启最佳状态?

我遇到的第一个随机理论是调查生成多少内部代码,这样“阶段1”就可以做很多工作来消除欺骗。我特别想到模板或宏或旧式常量声明。通过包含在一个常见的预编译头文件中,这些也会受到干扰,因为我经常看到使用项目的windows / mfc / STL的天真设置。

祝你好运,如果你发现一些特别糟糕的东西,那将会很棒。