Visual C++ 2008: Нахождение причины времен медленного канала

У меня есть проект C++ прежней версии, который раздражающе занимает много времени для создания (несколько минут, даже для небольших возрастающих изменений), и я нашел, большую часть времени был потрачен, связавшись.

Проект уже использует предварительно скомпилированные заголовки и инкрементную компиляцию. Я включил "/время" параметр командной строки в надежде, я получил бы больше деталей о том, что замедляет компоновщика и получило следующий вывод:

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 файлом.

Кроме того, есть ли какая-либо документация, которая объясняет, что каждый из этих шагов делают?

9
задан doublep 4 May 2010 в 05:45
поделиться

2 ответа

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

Может помочь добавление флага компоновщика / OPT: NOICF . В качестве альтернативы, исследуйте, почему вам нужно сворачивать так много литералов.

4
ответ дан 3 November 2019 в 07:12
поделиться

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

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

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

1
ответ дан 3 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: