Ускорение компиляции и модульного тестирования в Visual Studio 2010 / Resharper / ASP.NET MVC - PullRequest
12 голосов
/ 04 января 2011

Я работаю над средним решением ASP.NET MVC с Visual Studio 2010 и Resharper.Проект быстро развивался, когда я начал его разрабатывать полтора года назад, но со временем он стал медленнее - не только компиляция, но и время, необходимое ASP.NET для повторной инициализации сайта.Поскольку я практикую TDD и рефакторинг довольно часто, мне часто приходится перекомпилировать повторные тесты, поэтому я ищу способы смягчить это, если это возможно.

Проблема в деталях

У меня уходит около 20-25 секунд от начала перекомпиляции проекта до возможности просмотра результата в веб-браузере.

Выполнение одиночного модульного теста (только одного теста, а не всего пакета) с помощью инструмента запуска Resharper также очень медленное (около 15-20 секунд).По какой-то странной причине кажется, что Resharper большую часть времени инициализирует тестовый прогон и тратит только очень небольшую часть, фактически выполняя тест.

Что я уже сделал:

  • Заменил мой жесткий диск на SSD (огромное влияние)
  • Перемещена компиляция ASP.NETи директория Windows Temp dir к SSD-подобному (аппаратному) ОЗУ (большое влияние, но это было до SSD)
  • Отключена автоматическая компиляция одного проекта, который я редко изменяю (Небольшое влияние, так как этот проект в любом случае мал),
  • Устранены ненужные ссылки на .NET и сторонние библиотеки (очень небольшое влияние, если таковые имеются)
  • Некоторые уловки черной магии, обсуждаемые в этом посте .(очень небольшое влияние, если таковое имеется).

И все же я все еще застрял с (медленными?) Цифрами выше и чувствую, что это наносит ущерб моей производительности.Теперь мне интересно, что делать дальше.

Моя текущая настройка системы:

  • Core 2 Quad Q6600 CPU
  • 4 ГБ DDR2 800 RAM
  • 120 ГБ SSD
  • Windows 7 x64
  • Visual Studio 2010 Ultimate с Resharper 5.5

Характеристики моего решения:

  • 22.000 строк кода .NET 4 C #
  • 3 проекта: один ASP.NET MVC, один тестовый проект, одна крошечная библиотека общего назначения включены в две другие и которые я не компилирую, если что-то не изменилось.
  • 35 ссылок на другие библиотеки (.NET Framework и с открытым исходным кодом)
  • ~ 200 Views
  • 850 Unit-тестов

Теперь мойвопросы:

  • Может ли повышение оперативной памяти до 8 ГБ дать мне значительный прирост производительности?
  • Являются ли эти цифры нормальными?Или, может быть, это может быть проблемой с моим решением?
  • Что вы попробуете дальше (кроме покупки совершенно нового компьютера)?

Спасибо,

Адриан

Редактировать: Одна особенно странная вещь заключается в том, что когда я нажимаю кнопку "решение для сборки", Visual Studioтратит около 8 секунд, показывая мне символ ожидания, пока он фактически не начнет компилироваться и окно компиляции обновляется.IDE не отвечает на этот период.Это хорошая часть фактического времени компиляции.Интересно, что делает Visual Studio в этот период?

Ответы [ 6 ]

6 голосов
/ 04 января 2011

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

  1. попробуйте включить «Детализация вывода сборки проекта MSBuild» в «Диагностика» (Параметры-> Проекты и решения-> Построить и запустить), также установите расширения VSCommands (оно содержит расширение статистики сборки, которое показывает время, затраченное на каждый шаг) и проверьте, какая часть говорит больше всего времени.

  2. Являются лизависимости от других проектов (те 35, на которые вы ссылаетесь) в GAC, или они разбросаны по вашему HD?Являются ли они автоматически обновляемыми ссылками (у них есть файл .refresh под ними).Можно попытаться упростить разрешение этих зависимостей, т.е. скопировать все локальные библиотеки DLL в каталог bin и посмотреть, поможет ли это

3 голосов
/ 11 января 2011

Вы можете попробовать секретную функцию Resharper.Internal "Параллельное создание с MSBuild", как описано здесь .

1 голос
/ 11 июня 2012

У меня была похожая проблема.Так как я нажал кнопку 'Run tests', тест занял около минуты.

Моя проблема заключалась в том, что у меня были настройки теста, указывающие на 'Trace and Impact' вместо 'Local'.

Чтобы выбрать настройки теста, перейдите в меню 'Test', а затем 'Select Active Test Settings > Local'.

Это сработало для меня.

1 голос
/ 09 апреля 2012

Поскольку это MVC-проект, убедитесь, что «Build Views» вашего проекта отключен.

  1. Щелкните правой кнопкой мыши Файл проекта -> Выгрузить проект в вашем проекте MVC
  2. Щелкните правой кнопкой мыши ProjectФайл -> Редактировать проект
  3. Проверить настройки ... false
  4. Сохранить и щелкнуть правой кнопкой мыши -> перезагрузить проект.

Я оставляю его включенным, чтобы компилятор нашелмои ошибки, прежде чем мои клиенты делают.Но Build Views ужасно медленный.

0 голосов
/ 06 сентября 2013

Подобная проблема здесь, я бы оставил «покрытие кода» включенным.

0 голосов
/ 04 января 2011

Вы можете настроить сервер сборки, который будет запускаться:

  • Сборка
  • Тесты
  • Развертывание

У вас будетподождать примерно столько же времени, чтобы запустить новую версию, но она не будет потреблять ресурсы вашего ПК для разработки.

...