Visual C ++ 2008: поиск причины медленного времени соединения - PullRequest
9 голосов
/ 04 мая 2010

У меня есть унаследованный проект 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 ]

4 голосов
/ 04 мая 2010

Шаг "MD Merge" ищет и объединяет дублирующиеся строковые литералы и другие дублированные данные. Обратите внимание, что время, необходимое для этого, составляет O (n ^ 2) от количества имеющихся у вас строковых литералов, поэтому у меня когда-то была похожая проблема, когда заголовочный файл со строковыми литералами ~ 10K занимал 5 минут для ссылки.

Добавление флага компоновщика /OPT:NOICF может помочь. Кроме того, изучите, почему у вас так много литералов.

1 голос
/ 04 мая 2010

Надеюсь, кто-нибудь из команды vs dev увидит это и сможет прокомментировать, может, разместит ссылку на свой форум / блог и откликнется на лучшее?

Первая случайная теория, которая мне приходит в голову, состоит в том, чтобы исследовать, сколько генерируется кода в заголовке, так что «фаза 1» будет так много работать для устранения дубликатов. Я специально думаю о шаблоне или макросе или объявлениях констант старого стиля. Они также будут усугублены включением в общий предварительно скомпилированный заголовок, как я часто видел при наивной настройке для windows / mfc / STL с использованием проектов.

Удачи, было бы здорово услышать, если вы найдете что-то плохое.

...