Мы получаем очень медленное время компиляции, которое может занимать более 20 минут на двухъядерных машинах с тактовой частотой 2 ГГц и 2G Ram.
Во многом это связано с размером нашего решения, которое выросло до 70+ проектов, а также с VSS, который сам по себе является узким местом, когда у вас много файлов. (замена VSS, к сожалению, не вариант, поэтому я не хочу, чтобы это переходило в Bash VSS)
Мы рассматриваем объединение проектов. Мы также ищем несколько решений для достижения большего разделения проблем и сокращения времени компиляции для каждого элемента приложения. Я вижу, это превратится в ад для DLL, поскольку мы пытаемся синхронизировать вещи.
Мне интересно узнать, как другие команды справились с этой проблемой масштабирования, что вы делаете, когда ваша кодовая база достигает критической массы, на которую вы тратите половину дня, наблюдая, как строка состояния доставляет сообщения компиляции.
ОБНОВЛЕНИЕ Я забыл упомянуть, что это решение C #. Спасибо за все предложения C ++, но прошло несколько лет с тех пор, как мне приходилось беспокоиться о заголовках.
РЕДАКТИРОВАТЬ:
Хорошие предложения, которые помогли до сих пор (не говоря уже о том, что ниже нет других хороших предложений, просто то, что помогло)
- Новый ноутбук с тактовой частотой 3 ГГц - сила потери нагрузки творит чудеса, когда мы обращаемся к руководству
- Отключить антивирус во время компиляции
- «Отключение» от VSS (на самом деле сети) во время компиляции - я могу заставить нас полностью удалить интеграцию VS-VSS и придерживаться пользовательского интерфейса VSS.
По-прежнему не копирует компиляцию, но помогает каждый бит.
Орион упомянул в комментарии, что у дженериков тоже может быть игра. Мои тесты показывают, что производительность минимальна, но недостаточно высока, чтобы быть уверенным - время компиляции может быть нестабильным из-за активности диска. Из-за ограничений по времени мои тесты не включали столько универсальных шаблонов или столько кода, сколько могло бы появиться в реальной системе, так что это могло накапливаться. Я бы не стал избегать использования дженериков там, где они должны использоваться, только для производительности во время компиляции.
Временное решение
Мы тестируем практику создания новых областей приложения в новых решениях, при необходимости импортируя новейшие библиотеки DLL и интегрируя их в более крупное решение, когда мы довольны ими.
Мы также можем сделать то же самое с существующим кодом, создав временные решения, которые просто инкапсулируют области, над которыми нам нужно работать, и выбрасывая их после реинтеграции кода. Нам нужно взвесить время, необходимое для реинтеграции этого кода, и время, которое мы выиграем, не имея опыта быстрой перекомпиляции в процессе разработки, как у Рипа Ван Винкля.