Мы получаем очень медленное время компиляции, которое может занять более 20 минут на двухъядерных 2 ГГц, 2 Гб-машинах.
Многое из-за размера нашего решения, которое выросло до 70+ проектов, а также VSS, который сам по себе является горлом бутылки, когда у вас много файлов. (переключение VSS не является вариантом, к сожалению, поэтому я не хочу, чтобы это спустилось в VSS bash)
Мы смотрим на слияние проектов. Мы также рассматриваем несколько решений для достижения большего разделения проблем и более быстрого времени компиляции для каждого элемента приложения. Это, я вижу, станет адской DLL, поскольку мы пытаемся синхронизировать ситуацию.
Мне интересно узнать, как другие команды справились с этой проблемой масштабирования, что вы делаете, когда ваша база кода достигает критической массы, которую вы теряете в полдня, наблюдая, как строка состояния доставляет компилируемые сообщения.
UPDATE Я забыл упомянуть об этом решении С#. Спасибо за все предложения С++, но прошло несколько лет с тех пор, как мне пришлось беспокоиться о заголовках.
EDIT:
Хорошие предложения, которые помогли до сих пор (не сказать, что нет других хороших предложений ниже, только то, что помогло)
- Новый ноутбук 3GHz - сила потерянного использования творит чудеса, когда водит к управлению
- Отключить Антивирус во время компиляции
- "Отключение" от VSS (фактически сети) во время компиляции - я могу заставить нас полностью удалить интеграцию VS-VSS и придерживаться использования VSS-интерфейса
Все еще не rip-snorting через компиляцию, но каждый бит помогает.
Орион упоминал в комментарии, что у дженериков может быть и игра. Из моих тестов, похоже, наблюдается минимальный выигрыш в производительности, но недостаточно высокий - время компиляции может быть непоследовательным из-за активности диска. Из-за ограничений по времени мои тесты не включали столько Generics или столько же кода, сколько появлялось в живой системе, чтобы они могли накапливаться. Я бы не избежал использования дженериков, где они должны использоваться, просто для времени выполнения компиляции
РЕШЕНИЕ
Мы тестируем практику создания новых областей приложения в новых решениях, при необходимости импортируя их в новейшие библиотеки DLL, интегрируя их в более крупное решение, когда мы будем довольны ими.
Мы также можем сделать их одинаковыми с существующим кодом, создав временные решения, которые просто инкапсулируют области, над которыми нам нужно работать, и отбрасывая их после реинтеграции кода. Нам нужно взвесить время, необходимое для реинтеграции этого кода, против времени, которое мы получаем, не имея Rip Van Winkle, как опыт быстрой перекомпиляции во время разработки.