Увеличивает ли количество проектов в вашей визуальной студии время компиляции? - PullRequest
4 голосов
/ 01 декабря 2009

Какой сценарий ниже будет компилироваться быстрее?

  1. Два проекта внутри решения. Каждый проект имеет 5 классов.

  2. Один проект внутри решения. Проект состоит из 10 классов (комбинация двух проектов в сценарии а).

В основном я пытаюсь понять, повлияет ли наличие двух проектов на время компиляции в решении.

Ответы [ 9 ]

4 голосов
/ 04 декабря 2009

Да, в больших решениях C # наличие большего количества проектов делает время компиляции очень заметно (на много минут).По крайней мере, это мой опыт.Однако я бы добавил предостережение.Я подозреваю, что проекты компилируются, когда это не является строго ненужным, потому что C # не так уж умен в том, что он выбирает для компиляции.Так что, если большинство проектов не ссылаются на другие проекты, это может не быть такой проблемой.Я не могу сказать наверняка, потому что код, над которым я работал (унаследованный материал, не мой, спешу добавить), который имеет такого рода проблемы, не связан свободно с этим POV.медленная компиляция является особенностью некоторых языков (например, всех языков на основе Си).Языки, которые могут быть скомпилированы за один проход (например, производные Паскаля, такие как Delphi), компилируются гораздо быстрее (10 ^ 6 LOC в секундах).

Так что есть предел тому, насколько быстро вы можете получить в любом случае.Это в основном аппаратная проблема, поскольку компиляция очень интенсивна на диске (т. Е. Медленна) для большинства языков (FL могут быть исключением).Другие потоки здесь говорят о способах ускорения времени компиляции VS, и самое большое улучшение всегда заключается в том, чтобы получить действительно быстрый HD или, что лучше, современный SSD.

2 голосов
/ 01 декабря 2009

Я бы сказал, да, но я думаю, что разница во времени будет незначительной, если файлы не очень большие (10 000 строк было, когда он начал замедляться для меня)

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

2 голосов
/ 01 декабря 2009

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

С другой стороны, большинство крупных проектов ДОЛЖНЫ быть разделены на несколько проектов и пространств имен для удобства чтения и навигации. Это действительно зависит от того, что вы делаете, но вы можете поместить 1000 классов в один файл, или несколько файлов, или несколько файлов в нескольких проектах. Количество времени (минимальное), сэкономленное во время компиляции, не сравнится с потраченным временем на поиск материалов в плохо продуманном решении.

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

РЕДАКТИРОВАТЬ: с другой стороны, если у вас есть проект, достаточно большой, чтобы вы заметили реальную разницу во времени компиляции, вам, вероятно, следует подумать о реализации некоторой непрерывной интеграции (см .: http://en.wikipedia.org/wiki/Continuous_integration) среда, которая будет держать текущую сборку готовой для вас, а также сообщать вам, если что-то сломалось.

1 голос
/ 03 декабря 2009

По моему опыту разработки .Net, это зависит от того, включена ли многопоточная компиляция или нет.

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

1 голос
/ 03 декабря 2009

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

1 голос
/ 01 декабря 2009

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

1 голос
/ 01 декабря 2009

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

  • Задачи MSBuild
  • Запись файлов на диск
  • Чтение зависимых сборок
  • Общие накладные расходы, связанные с несколькими проектами в решении
1 голос
/ 01 декабря 2009

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

0 голосов
/ 03 декабря 2009

Вы хотите, чтобы мы сказали вам, что быстрее: 10 классов в одном проекте или 5 классов в каждом из двух проектов.

Неужели вы сами не можете сказать разницу?

Если вы можете заметить разницу, то вы можете выбрать тот, который быстрее.

Если вы не можете определить разницу, почему важно, что быстрее? Выберите тот, который имеет больше смысла для вас.

Что-то не так с вашим вопросом . Время на компиляцию 10 классов любого разумного размера минимально, поэтому попытка оптимизировать его - пустая трата энергии. Какой у тебя настоящий вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...