Производительность бритвы ASP.NET MVC 3

Важное обновление: см. обновление 5 внизу, нет проблемы с производительностью в asp.net mvc 3, это проблема теста

Я сделал простой проект hello world в asp.net mvc2,3 aspx и 3 бритве и сравнил их. Я вижу:

System                  Requests per second
-------------------------------------------
asp.net mvc 2 ASPX                     4200
asp.net mvc 3 Beta 1 ASPX              3200
asp.net mvc 3 Beta 1 Razor             1700

Что не так с бритвой, это так медленно?

Update: Я переделал тест. Все 4 тестовые виртуальные каталоги используют тот же самый пул приложений .net 4 с интегрированным режимом. Все проекты выполняются с добавлением нового пустого x-проекта и добавлением 1 страницы с 1 строковым текстом и без кода. все сайты скомпилированы в режиме выпуска. Моя система - это окна 7, 4 gb i7 4 ядра. Я проверил тест 2 раза, чтобы разогреть iis, и это результаты второго запуска. Параметры сканера apache: ab -n100000 -c1000 Результаты:

System         Requests per second   CPU Utilization
----------------------------------------------------
asp.net 4                     4780               43%
mcv 2                         4322               58%
mvc 3 beta 1 aspx             2324               54%
mvc 3 beta 1 razor            1615               54%

Обновление 2 Скотт Гатри ответил в своем блоге:

Мы еще не полностью оптимизировали MVC3 (обычно мы часто настраиваем кеш-память). Мы ожидаем, что бритва будет той же самой производительностью, что и механизм просмотра .aspx, прежде чем он будет наконец выпущен.

System         Requests per second   CPU Utilization
----------------------------------------------------
mvc 3 rc1 razor               1960               54%
mvc 3 rc2 razor               2187               54%
mvc 3 rc2 aspx                4014               58%

Обновить 5 все тесты, выполненные в режиме деблокирования, но проблема была debug="true" в моем файле web.config(что также влияет на выпуск сборок), после изменения его на значение false, исправление исправлено. И это интересно, как это влияет только на бритва templating в этом масштабе. Это должно быть в нашем сознании при развертывании.

System         Requests per second   CPU Utilization
----------------------------------------------------
mvc 3 rc2 razor               3940               58%
mvc 3 rc2 aspx                4100               58%

Спасибо команде asp.net mvc, отличная работа!

Ответ 1

(новый ответ для ответа на ваши номера RC2)

Спасибо за обновленные номера. Несколько моментов:

  • Ваши номера Aspx выглядят хорошо, в том смысле, что мы ожидаем, что MVC3 Aspx будет наравне с MVC2 Aspx (ожидается немного медленнее в таком примере Hello World)
  • Ваши номера Razor выглядят подозрительными. Мы знаем, что Razor немного медленнее, чем эквивалент Aspx, однако разница не должна превышать 5-7%. Ваши цифры указывают на 50% медленнее, что просто не соответствует нашим результатам. Проверьте, компилируется ли проект в Release и у вас есть debug="false", установленный в web.config.
  • Использование вашего процессора немного подозрительно. При 1000 одновременных запросах процессор должен быть утилизирован на 100%. (Даже 8 одновременных запросов должны быть достаточными, так как у вас есть 8 виртуальных ядер)
  • Ваши тесты работают около 20-25 секунд. Это немного на низкой стороне, потому что короткий (1-2 секунды) всплеск активности в других местах системы может значительно снизить ваши результаты.
  • Что касается пункта 4, вы запускали каждый сценарий один или несколько раз? Вы видите много различий в результатах? Поскольку ваша ОС делает другие вещи в фоновом режиме, типично видеть разные результаты между прогонами.

Ответ 2

Как вы выполнили бенчмарк? Был ли ваш сайт развернут в IIS в режиме Release? Вы использовали раздел <deployment retail="true" /> в файле machine.config? Также помните, что ASP.NET MVC 3 все еще находится в тяжелом развитии, поэтому вы не можете ожидать, что он будет полностью оптимизирован. По крайней мере, подождите, пока он не достигнет RTM.