Очень медленное время компиляции в Visual Studio 2005 - PullRequest
132 голосов
/ 11 сентября 2008

У нас очень медленное время компиляции, которое может занять более 20 минут на двухъядерных 2GHz, 2G Ram машинах.

Во многом это связано с размером нашего решения, которое выросло до 70+ проектов, а также с VSS, который сам по себе является узким местом, когда у вас много файлов. (замена VSS, к сожалению, не вариант, поэтому я не хочу, чтобы это перешло в VSS bash)

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

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

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

EDIT:

Хорошие предложения, которые помогли до сих пор (не говоря уже о том, что нет других хороших предложений ниже, только то, что помогло)

  • Новый 3GHz ноутбук - сила потерянного использования творит чудеса при стремлении к управлению
  • Отключить антивирус во время компиляции
  • «Отключение» от VSS (фактически от сети) во время компиляции - я могу заставить нас полностью удалить интеграцию с VS-VSS и придерживаться использования интерфейса VSS

Все еще не перебирая фишки через компиляцию, но каждый бит помогает.

Орион упомянул в комментарии, что у дженериков тоже может быть игра. Судя по моим тестам, производительность кажется минимальной, но недостаточно высокой, чтобы быть уверенной - время компиляции может быть непоследовательным из-за активности диска. Из-за нехватки времени мои тесты не включали столько Generics или столько кода, сколько могло бы появиться в работающей системе, чтобы они могли накапливаться. Я бы не стал использовать дженерики там, где они должны использоваться, только для производительности во время компиляции

* 1029 Временное решение *

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

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

Ответы [ 34 ]

0 голосов
/ 30 августа 2011

Я нашел здесь свое исправление: http://blogs.msdn.com/b/vsdteam/archive/2006/09/15/756400.aspx

0 голосов
/ 04 августа 2011

Я обнаружил, что следующее помогает в скорости компиляции: После повторных компиляций (итеративная разработка в памяти) я бы вышел из VS2008. Затем перейдите в каталоги проекта и удалите все папки obj и bin, запустите проект обратно, и мое время компиляции ушло вниз. Это похоже на действие Clean solution в VS2008.

Просто хочу подтвердить, полезно ли это кому-либо там.

0 голосов
/ 31 марта 2009

Конечно, есть проблема с VS2008. Потому что единственное, что я сделал, - это установил VS2008 для обновления моего проекта, созданного с помощью VS2005. У меня есть только 2 проекта в моем решении. Это не большое. Компиляция с VS2005: 30 секунд Компиляция с VS2008: 5 минут

0 голосов
/ 25 марта 2011

Есть несколько вещей, которые я нашел полезными для ускорения сборки C # / .NET:

  • Объедините небольшие проекты в более крупные проекты, поскольку при создании решения возникают большие накладные расходы на каждый проект. (При необходимости используйте nDepend для управления вызовами между слоями)

  • Сделайте все наши проекты встроенными в некоторый выходной каталог, а затем установите «copy local» в false на всех ссылках проекта - это может привести к значительному увеличению скорости из-за уменьшения ввода-вывода.

  • Включите проверку на вирусы, чтобы увидеть, имеет ли это большое значение; если это так, найдите более быструю проверку на вирусы или исключите «горячие» папки из проверки на наличие вирусов

  • Используйте монитор перформанса и внутренний инструмент sys, чтобы увидеть, как долго ваши компиляции тратятся.

  • Рассмотрим ram-диск для установки выходного каталога.

  • Рассмотрите возможность использования SSD

  • Временами больший объем памяти может иметь большой эффект - (уменьшив баран в машине, если вы сильно замедлились, удалив небольшого барана, вы можете увеличить скорость, добавив больше) Удалите ненужные ссылки на проекты (возможно, вам придется сначала удалить ненужные «использования»)

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

...