ASP.NET MVC 3 Razor производительность

Важное обновление: см. Обновление 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

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

Обновить: Я переделал тест. Все 4 тестовых виртуальных каталога используют один и тот же пул приложений в интегрированном режиме .net 4. Все проекты выполняются с добавлением нового пустого проекта x и добавлением 1 страницы с текстом в 1 строку и без кода. Все сайты компилируются в режиме релиза. Моя система Windows 7, 4 ГБ i7 4 ядра. Я прогонял тест 2 раза, чтобы прогреть iis, и это результаты второго прогона. Параметры Apache Bench: 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 проблема исправлена. И интересно, как это влияет только на шаблоны бритвы в этом масштабе. Это следует учитывать при развертывании.

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

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

 Oded30 сент. 2010 г., 10:35
+1 Darin - не могу ожидать, что продукт в альфа / бета-стадии будет полностью оптимизирован.
 Slavo30 сент. 2010 г., 10:36
Это совершенно подходящий ответ, зачем вы отправляете его в качестве комментария?
 sirmak12 дек. 2010 г., 11:52
@upthecreek: все тесты выполнены в режиме выпуска, и я не ожидал установки по умолчанию в web.config, которая также может влиять на сборки выпуска. Интересно, как это влияет только на шаблоны бритвы (не aspx) в этом масштабе.
 mnemosyn22 окт. 2010 г., 20:03
Можете ли вы отключить старый ASPX ViewEngine в MVC3? Я думаю, что где-то читал, что множественные ViewEngines являются основным фактором снижения производительности в MVC2, возможно, эта проблема все еще существует в MVC3, и что накладные расходы являются частью проблемы? Было бы очень интересно узнать это!
 Darin Dimitrov30 сент. 2010 г., 10:38
Отправленный комментарий как ответ.
 UpTheCreek12 дек. 2010 г., 11:10
Re: Обновление 5 - О человеке: /
 Darin Dimitrov30 сент. 2010 г., 10:30
Как вы провели тест? Был ли ваш сайт развернут на IIS в режиме Release? Вы использовали<deployment retail="true" /> раздел в вашем machine.config? Также помните, что ASP.NET MVC 3 все еще находится в стадии разработки, поэтому вы не можете ожидать его полной оптимизации. По крайней мере, подождите, пока он не достигнет RTM.
 marcind11 дек. 2010 г., 20:38
Публикация ответа в качестве нового ответа, поскольку биты RC2 - это почти то же, что и RTM.
 sirmak11 дек. 2010 г., 15:53
@marcind: я обновил тест. Существует проблема при использовании шаблонов бритвы. У меня есть страница бритвы только с одной строкой. В том же тесте, когда я переименовываю расширение файла с помощью aspx, увеличение производительности в два раза, как вы можете видеть в моем обновлении, интересно.
 marcind10 дек. 2010 г., 22:11
Я видел, что вы задали этот вопрос в блоге Фила Хаака по поводу RC2. Мы проделали значительную работу, и ваши цифры должны улучшиться. Не могли бы вы попробовать новую сборку?

Ответы на вопрос(2)

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

 sirmak12 дек. 2010 г., 09:55
@ Майкл: хорошо, ты прав
 sirmak09 окт. 2010 г., 11:56
Привет, я переделал тест и обновил свой вопрос.
 Michael Haren12 дек. 2010 г., 01:16
@ sirmak, я предлагаю тебедобавлять к этому, имея сложный пример тоже. Механизмы просмотра могут не масштабироваться, как вы ожидаете
 sirmak08 окт. 2010 г., 08:08
это был обычный простой тест на мир, и загрузка процессора составляла ок. % 40 на 4 ядре i7 для бритвы. Я не мог вспомнить использования процессора aspx. Я запускаю все тесты в одинаковых условиях на Windows 7 и примеры приложений были одинаковыми пустыми проектами. Я сделаю новый новый тест для всех и вернусь к вам с более подробной информацией.
 Michael Haren11 дек. 2010 г., 15:56
Я мог бы предложить запустить несколько более сложных примеров. Это может заставить вещи выглядеть более равномерно или менее, но это было бы по крайней мере более реалистично
 sirmak06 окт. 2010 г., 20:44
Выпущена бета-версия 1, а частота вращения бритвы упала до 1550
 sirmak30 сент. 2010 г., 10:53
да в режиме релиза на iis 7.5. Я протестировал с ab (бенчмарк Apache) и выполнил 50.000 запросов с 500-1000 клиентов. Я проверил это два раза, и эти цифры являются вторыми результатами (первые ниже). Я знаю, что он находится в стадии разработки, но не уверен, что после оптимизации возможно увеличение производительности в 3 раза.
 Mike Brind04 окт. 2010 г., 06:56
Почему вы уверены, что 3x оптимизация невозможна? Команда ASP.NET уже заявила, что анализатор Razor еще не оптимизирован.
 sirmak11 дек. 2010 г., 21:00
@Michael: пустой проект с одним контроллером и страницей, показывающей минимальные издержки системы, по моему мнению, с моим тестом проблем нет.
 marcind07 окт. 2010 г., 21:55
@sirmak мы знаем о некоторых проблемах производительности с текущими бета-битами. Вы повторно запустили свои тесты для всех 3 конфигураций или просто Razor на MVC 3 (если машина находится под другой нагрузкой, то прогоны могут быть несопоставимы). Является ли ваше тестовое приложение простой страницей Hello World? Я нахожу удивительным, что разница между Razor и ASPX настолько велика, учитывая, что когда у вас очень простая страница, время, затрачиваемое на рендеринг, сравнительно мало.
Решение Вопроса

(новый ответ, чтобы ответить на ваши номера 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, вы запускали каждый сценарий один или несколько раз? Вы видите много различий в результатах? Так как ваша ОС выполняет другие действия в фоновом режиме, типично видеть разные результаты между запусками.
 marcind11 дек. 2010 г., 21:51
Нет проблем. Вы должны быть осторожны при измерении перф.
 sirmak11 дек. 2010 г., 21:10
спасибо большое Марсинд, # 2 решил проблему, я скомпилировал в режиме релиза во всех тестах, но не установил debug = true в web.config. Установка значения false решила проблему. Я обновляю свой вопрос по этому поводу, а также публикую комментарий в блоге взломанного. rpc в бритве 3940 после этого шага.

Ваш ответ на вопрос