Что такое способы улучшить сборку/время компиляции?

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

, Как YAML отличающийся от базы данных?.. та же развертка - внешний к коду приложения персистентная установка.

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

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

9
задан 2 revs 10 October 2009 в 03:35
поделиться

9 ответов

Самым большим улучшением, которое мы сделали для нашего большого проекта C ++, стало распространение наших сборок. Пару лет назад полная сборка занимала около получаса, а сейчас около трех минут, из которых одна треть - это время компоновки.

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

6
ответ дан 4 December 2019 в 09:37
поделиться

Исправление предупреждений компилятора должно немного помочь.

3
ответ дан 4 December 2019 в 09:37
поделиться

На моей предыдущей работе у нас были большие проблемы со временем компиляции, и одна из стратегий, которые мы использовали, называлась паттерном конверта, см. здесь .

В основном он пытается минимизировать количество кода, копируемого препроцессором в заголовки за счет минимизации размера заголовка. Он делал это, перемещая все, что не было общедоступным, в частный класс друзей, вот пример.

foo.h:

class FooPrivate;
class Foo
{
public:
   Foo();
   virtual ~Foo();
   void bar();
private:
   friend class FooPrivate;
   FooPrivate *foo;
};

foo.cpp:

Foo::Foo()
{
   foo = new FooPrivate();
}

class FooPrivate
{
    int privData;
    char *morePrivData;
};

Чем больше включаемых файлов вы делаете, тем больше он добавляет вверх. Это действительно сокращает время компиляции.

Это действительно затрудняет отладку в VC6, как я узнал на собственном горьком опыте. Есть причина, по которой это предыдущая работа.

3
ответ дан 4 December 2019 в 09:37
поделиться

Если вы используете много файлов и много шаблонного кода (STL / BOOST и т. д.), то массовые сборки или сборки Unity должны сократить время сборки и компоновки.

Идея массовых сборок состоит в том, чтобы разбить ваш проект на подразделы и включить все файлы CPP в этот подраздел в один файл. Сборки Unity идут дальше, имея единый файл CPP, который скомпилирован, который включает все другие файлы CPP.

Причина, по которой это часто происходит быстрее, заключается в следующем:

1) Шаблоны оцениваются только один раз для каждого массового файла

2) Включаемые файлы открываются / обрабатываются только один раз для каждого массового файла (при условии, что во включаемом файле имеется надлежащая #ifndef FILE__FILENAME__H / #define FILE__FILENAME__H / #endif оболочка).

2
ответ дан 4 December 2019 в 09:37
поделиться

Будьте осторожны с широким распространением настроек типа «рассмотреть этот каталог и все подкаталоги для включения заголовка» в вашем проекте. Это заставит компилятор перебирать каждый каталог до тех пор, пока не будет найден запрошенный файл заголовка, что может оказаться очень дорогостоящей операцией для любого количества заголовков, которое вы включаете в свой проект.

2
ответ дан 4 December 2019 в 09:37
поделиться

Visual Studio поддерживает параллельные сборки, которые могут помочь, но настоящим узким местом является дисковый ввод-вывод.

Например, в C - если вы генерируете файлы LST, ваша компиляция займет много времени.

1
ответ дан 4 December 2019 в 09:37
поделиться

Прочтите, пожалуйста, эту книгу. Это довольно неплохо по теме физической структуры вашего проекта в разные файлы с минимальными перекомпилями.

К сожалению, он был написан до того, как шаблоны стали настолько важными. Когда дело доходит до компиляции C ++, шаблоны - убийца в реальном времени. Особенно, если вы совершите ошибку и повсюду используете умные указатели. В этом случае вы можете постоянно обновлять только ЦП и твердотельные накопители последней версии. MSVC уже является самым быстрым из существующих компиляторов C ++, если вы используете предварительно скомпилированные заголовки.

http://ecx.images-amazon.com/images/I/51HNJ7KBBAL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

2
ответ дан 4 December 2019 в 09:37
поделиться

Не компилировать при включенной отладке.

0
ответ дан 4 December 2019 в 09:37
поделиться
Другие вопросы по тегам:

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