ASP.NET MVC 3 Razor производительность - PullRequest
64 голосов
/ 30 сентября 2010

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

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

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: 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, отличная работа!

Ответы [ 2 ]

26 голосов
/ 11 декабря 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...