Как сократить время соединения в MSVC?

#c #visual-c

#c #visual-c

Вопрос:

Использование LTO в MSVC значительно увеличило время сборки.

До: Время сборки (выпуска): 00:02:48.2022884

После: Время сборки (выпуска): 00:04:50.1647716

Есть ли какой-либо способ сократить общее время соединения, необходимое в MSVC (или вообще)?

Комментарии:

1. Я сомневаюсь в этом. Вы просите компоновщика выполнить много дополнительной работы, и, по моему опыту, компоновщик MSVC работает относительно быстро. Но вы на самом деле делаете много релизных сборок? Лично я склонен делать их только в конце процесса разработки.

Ответ №1:

В последние несколько выпусков была проделана большая работа по повышению общей производительности компоновщика, поэтому VS 2019 — хорошее обновление для этого.

Для ваших «локальных» сборок разработки /DEBUG:FASTLINK может помочь избежать необходимости объединения всех PDF-файлов в один. Это не помогает вашим сборкам в одночасье, но это существенно влияет на время итерации.

В целом общее время выполнения «Оптимизации всей программы» / «Генерации кода во время соединения» будет масштабироваться в зависимости от размера конечного EXE-файла. Если у вас «большой монолитный» EXE-файл — я видел, что некоторые компьютерные игры достигают диапазона 100 МБ — это займет намного больше времени, чем меньший EXE-файл с несколькими библиотеками DLL.

Смотрите:

Комментарии:

1. Компоновщик в основном генерирует две вещи: конечный EXE или DLL и PDB со всеми объединенными символами. Создание PDB может занять довольно много времени, поэтому /DEBUG:FASTLINK создается PDB, которая просто указывает на все отдельные PDF-файлы, уже созданные в сборке. Это позволяет выполнять отладку ЛОКАЛЬНО, используя все PDF-файлы, и экономит время. Если вы публикуете EXE / DLL для использования другими, PDB должна быть полностью завершена, что вы можете сделать либо с помощью полной перестройки, либо с помощью специального инструмента.