Visual Studio 8: время сборки в сборках смешанного режима - PullRequest
1 голос
/ 19 августа 2009

У меня есть сборка C ++ / CLI, состоящая примерно из 50 исходных файлов. Код в этой сборке статически связан с несколькими библиотеками C ++ для выполнения различных задач типа «тяжелый».

Я использую Visual Studio 8 (2005) SP1 для сборки этой сборки.

Построение только этой сборки (без зависимостей и т. Д.) Через «Только проект» -> «Только перестроить» занимает около 4,5 минут на приличном двухъядерном компьютере. Ниже приведен сокращенный результат сборки с указанием приблизительного времени:

Compiling...
(file 0)
(file 1)
...
(file N)                   // About 2 min total to compile all files
Linking...                 // About 12s
Generating Code            // 42s
Finished Generating Code   // < 1s
Embedding Manifest         // < 1s
Generating Code            // 30s
Finished Generating Code
(15 seconds of nothing)
Done

Как мне начать отладку, почему сборка занимает так много времени? Время компиляции и компоновки, хотя и невелико, вероятно, соответствует ожидаемому для проекта такого размера. Меня беспокоит тот факт, что я вижу два шага «Генерация кода», каждый из которых занимает гораздо больше времени, чем большинство других проектов.

Моим первым предположением было то, что это связано с количеством неуправляемого кода, который связан со сборкой. Однако у меня есть несколько проектов управляемых приложений, которые используют столько же собственного кода, и время сборки очень разумное.

Кто-нибудь знает, что именно может вызвать два шага «Генерация кода», которые занимают так много времени? Мне не хватает настроек проекта?

1 Ответ

1 голос
/ 27 сентября 2009

Используете ли вы предварительно скомпилированные заголовки для вашего проекта? Управляемый C ++ поддерживает его так же, как неуправляемый C ++. Чтобы переключить ваш проект на предварительно скомпилированные заголовки:

См. эту статью (прокрутите вниз до раздела "Предварительно скомпилированный заголовок") для более подробной информации.

  • Убедитесь, что каждый отдельный файл .cpp начинается с #include "xxxx", где xxxx.h - это некоторый заголовочный файл, который включает в себя все общие заголовочные файлы, используемые в вашем проекте.
  • Создайте файл xxxx.cpp, который включает только файл xxxx.h и не имеет другого кода
  • В настройках компиляции VS для всего проекта, для всех конфигураций (build & release) в разделах заголовка перед компиляцией, чтобы весь проект использовал предварительно скомпилированный заголовок xxxx.h.
  • В настройках компиляции VS только для файла xxxx.cpp, для всех конфигураций (сборка и выпуск) в разделах заголовка перед компиляцией установите для него значение «генерировать предварительно скомпилированный заголовок».

Компиляция проекта теперь должна занимать часть предыдущего времени сборки.

...