Ускорение компиляции и модульного тестирования в Visual Studio 2010/Resharper/ASP.NET MVC
Я работаю над средним решением ASP.NET MVC с Visual Studio 2010 и Resharper. Проект стремительно развивался, когда я начал разрабатывать его 1 1/2 года назад, но со временем он стал медленнее - не только компиляция, но и время, необходимое ASP.NET для повторной инициализации веб-сайта. Поскольку я часто практикую TDD и рефакторинг, мне часто приходится перекомпилировать повторный запуск моих тестов, поэтому я ищу способы смягчить это, если это возможно.
Подробнее о проблеме
Мне требуется около 20-25 секунд, чтобы перекомпилировать проект, чтобы просмотреть результат в веб-браузере.
Запуск одиночного unit test (только одного теста, а не всего пакета) с тестовым бегуном Resharper также очень медленный (около 15-20 секунд). По какой-то странной причине кажется, что Resharper занимает большую часть времени, инициализируя тестовый прогон, и тратит только очень небольшую долю, фактически выполняющую тест.
Что я уже сделал:
- Заменен мой жесткий диск SSD (огромное влияние)
- Перемещенная компиляция ASP.NET и каталог каталога Windows Temp на SSD-подобный (аппаратный) привод RAM (большое влияние, но это было до 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 С# Code
- 3 проекта: один ASP.NET MVC, один тестовый проект, одна крошечная библиотека общего назначения включена двумя другими и которые я не компилирую, если что-то не изменилось.
- 35 ссылок на другие библиотеки (среда .NET и материалы с открытым исходным кодом)
- ~ 200 просмотров
- 850 единиц измерения
Теперь мои вопросы:
- Возможно, обновление моей памяти до 8 ГБ может привести к значительному повышению производительности?
- Являются ли эти цифры нормальными? Или, возможно, это может быть проблемой с моим решением?
- Что бы вы попробовали дальше (помимо покупки совершенно нового компьютера)?
Спасибо,
Адриан
Изменить:. Особенно странно, что, когда я нажимаю кнопку "build solution", Visual Studio тратит около 8 секунд, показывая мне символ ожидания, пока он фактически не начнет компиляцию, и окно компиляции обновлено. В течение этого периода IDE не реагирует. Это хорошая часть фактического времени компиляции. Интересно, что Visual Studio делает за этот период?
Ответы
Ответ 1
Для решения такого размера действительно кажется, что ваше оборудование в порядке и должно быть достаточно быстрым для сборки-теста. Я обнаружил, что большинство проблем с производительностью (в моем случае в любом случае) связаны с зависимостями проектов, а не с фактическим временем компиляции. Я пару идей, которые помогут вам выяснить проблему:
-
попробуйте "увеличить объем вывода сборки проекта MSBuild" в "Диагностика" ( "Опции- > Проекты и решения- > " Сборка и запуск "), также установите расширения VSCommands (в нем содержится расширение статистики сборки, которое показывает время на каждом шаге) и проверьте, какая часть, которая говорит больше всего времени.
-
Являются ли зависимости от других проектов (35, на которые вы ссылаетесь) в GAC, или они рассеиваются через ваш HD? Они автоматически обновляют ссылки (у них есть файл .refresh под ними). Maay попытается упростить разрешение этих зависимостей, то есть скопировать локальные все библиотеки DLL в каталог bin и посмотреть, помогает ли она
Ответ 2
Вы можете попробовать секретную функцию Resharper.Internal "Параллельное здание с MSBuild", как описано здесь.
Ответ 3
Так как это проект MVC, убедитесь, что проект "Build Views" отключен.
- Щелкните правой кнопкой мыши файл проекта → "Выгрузить проект" в проекте MVC.
- Щелкните правой кнопкой мыши Файл проекта → Изменить проект
- Проверить настройки...
ложь
- Сохранить и щелкните правой кнопкой мыши → перезагрузить проект.
Я оставляю его так, чтобы компилятор обнаружил мои ошибки до того, как мои клиенты сделают это. Но Build Views выглядит ужасно медленным.
Ответ 4
У меня была аналогичная проблема. Поскольку я нажал кнопку 'Run tests'
, потребовалось около минуты, чтобы выполнить тест.
Моя проблема заключалась в том, что у меня были настройки теста, указывающие на 'Trace and Impact'
вместо 'Local'
.
Чтобы выбрать тестовые настройки, перейдите в меню 'Test'
, а затем 'Select Active Test Settings > Local'
.
Это сработало для меня.
Ответ 5
Вы можете настроить сервер сборки, который будет запускаться:
- Построить
- Испытания
- Развертывание
Вам придется подождать примерно столько же времени, чтобы увидеть, как новая версия переходит в прямом эфире, но она не будет потреблять ресурсы вашего ПК для разработки.
Ответ 6
Аналогичная проблема здесь, я оставил "охват кода" включен.