2013-04-17 2 views
2

У нас есть решение VisualStudio среднего размера, содержащее 60 проектов. Каждый проект содержит кодовые контракты. Поскольку мы используем Contract.Requires<T> для наших предварительных условий, нам необходимо, чтобы наши сборки были перезаписаны после компиляции.Как улучшить производительность конвертера CodeContract в VS2012?

Режим сборки - «Стандартный контракт требуется», проверка выполнения установлена ​​на «полный», и у нас есть «Assert on contract failure». Ссылка на контрактную сборку установлена ​​на «Build».

После изменения с VS2010 на VS2012 (VS2010 был удален до установки) наше решение построило бы в 1m 30s. После установки установочного пакета CodeContracts время сборки увеличилось до 5 м 30 с (поскольку бинарный перезаписывающий модуль теперь переписывал сборки).

Это намного дольше, чем потребовалось, чтобы построить решение в VS2010, которое заняло около 3 м для полной перестройки.

Кто-нибудь испытал подобное замедление или имеет представление о том, как можно улучшить ситуацию?

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

+0

Один из моих коллег использует VS2012 с нашим решением, имеющим кодовые контракты, и он этого не видит (хотя у нас только около 5 проектов). Интересно, но если это связано с этой [публикацией форума] (http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/d5a61334-9404-4a43-9836-294e71196c62). – Mightymuke

ответ

0

У нас есть решение с более чем 90 проектами, на которых работает переписывающее устройство на большинстве из них. На HP z420, с параллельным наращиванием, я могу построить решение примерно через 1 мин 40 секунд. Переписывающий файл добавляет 2-10 секунд на проект в зависимости от размера перезаписываемой dll. Это с последней версией 1.5.60409.11.

+0

Одно из предложений, которое я разместил на форуме CodeContract, - установить бит 32 бит в исполняемом файле для запуска CLR в 32-битном режиме. На 64-битной машине это может сэкономить несколько секунд. http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/ff115adb-d2ed-4aaf-8889-3b8732517fdb –

0

Я заметил серьезное замедление со статической проверкой, но не уверен, что это применимо здесь. Я не уверен, но я думаю, что они недавно изменили работу кэширования. Я думаю, что он использовал кеш-файл по умолчанию, но больше не имеет этой опции. В настройках CC для вашего проекта есть возможность указать экземпляр SQL для кеширования. Мне потребовалось некоторое время, чтобы исправить это, но я использую экземпляр SQL Express на своей машине. У меня есть «Cache Results», а «SQL Server» установлен на .\SQLEXPRESS. Когда запускаются инструменты, вы должны видеть сообщения о кешировании в окне вывода, когда они не работают.

0

Когда я начинаю новое решение, первое, что я делаю это, чтобы создать новую конфигурацию решения:

  1. Debug
  2. Debug CC
  3. релиз

Я тогда только включить код Контракты на отладку CC. Это позволяет мне быстро компилироваться в режиме отладки и переключиться на сборку кода, когда я близок к фиксации.

Смежные вопросы