Что может вызвать медленный запуск в режиме отладки? - PullRequest
2 голосов
/ 01 июля 2011

У меня были проблемы с отладкой некоторых очень сложных интеграционных тестов в нашем приложении. Тест включает в себя настройку среды, развертывание базы данных и тестируемый код, использует множество запросов к базе данных с помощью NHibernate, Spring.NET (DI, AoP, транзакции, ...), многопоточность и некоторую сетевую активность при взаимодействии с платформой интеграции (включает в себя обращения к нативной платформе). DLL).

У меня есть две системы, в которых я работаю с одной и той же кодовой базой:

Блокнот

  • i7 (2 ядра с HT = 4 логических процессора), 4 ГБ ОЗУ, диск 5400 об / мин, Win 7 64 бит

Виртуальная машина (Oracle Virtual Box)

  • Хост: i7 (4 ядра с HT = 8 логических процессоров, 12 ГБ ОЗУ, система работает с SSD, виртуальная машина с 7200 об / мин диском, Win 7 64bit)
  • Виртуальная машина: назначено 4 ядра, выделено 8 ГБ ОЗУ, Win 2008 R2 Enterprise (64-разрядная версия)
  • VPN для сетевого общения
  • Никакая другая виртуальная машина не работает на хосте

Теперь, если я запускаю тест без отладки, время выполнения составляет почти те же самые 12-15 с (так что сетевое взаимодействие не должно быть проблемой), но если я запускаю тест с отладкой, это занимает менее 2 минут на ноутбуке, но более 4 минуты на виртуальной машине (мне нужно отладить некоторый код в самом конце теста). Я ожидаю, что виртуальная машина будет работать лучше, чем ноутбук, но она работает более чем в два раза медленнее!

Тестовый код использует базовые классы тестирования NUnit, Spring.NET и запускается из сеанса тестирования VS 2010 Ultimate + Resharper.

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

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

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

Edit:

Когда я писал этот вопрос, я думал о другой причине, не связанной с самим программированием - я поставил отдельный вопрос о SuperUser .

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Возможно, проблема связана с антивирусом на хост-компьютере. Я сделал исключения из сканирования виртуальных дисков, как описано в связанном вопросе SuperUser, и производительность была улучшена.

Еще одним повышением производительности стало использование подключения к отладчику по требованию с использованием класса Отладчик (только для устранения проблем) вместо запуска всего теста, присоединенного к отладчику.

1 голос
/ 01 июля 2011

В прошлом у меня была такая проблема, проблема была связана с неправильным использованием сторонней библиотеки, которая вызывает условия гонки и тайм-ауты. Включение всех видов исключений помогло мне выяснить, где зависает тест. Попробуйте включить все исключения в Visual Studio -> Debug -> Exceptions и снова запустите тест

...