#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 должна быть полностью завершена, что вы можете сделать либо с помощью полной перестройки, либо с помощью специального инструмента.