Есть ли затраты на производительность при использовании razor views против встроенного кода в контроллере класса?

#asp.net-mvc

#asp.net-mvc

Вопрос:

После того, как запрос был скомпилирован и вызван несколько раз, есть ли разница в производительности между :

 public ActionResult Index()
{
    return View("~/Views/Index.cshtml");
}
 

И

 public ActionResult Index() {
    var sb = new StringBuilder();
    sb.Append("<html><body>Bla bla bla bla</body></html>");
    return Content(sb.ToString());
}
 

Я чувствую, что при использовании он есть.

Является ли скомпилированный код, полученный в результате синтаксического анализа Razor, приблизительно таким же, как при использовании stringbuilder, или совершенно другим?

Комментарии:

1. Почему бы вам самому не проверить разницу в производительности и не выяснить?

Ответ №1:

Ответ зависит от того, какой контент содержится в представлении. Раньше я Glimpse измерял время для рендеринга Index() метода, один раз используя View() и возвращая другой Content() с приведенным вами образцом HTML. В обоих случаях время было примерно одинаковым — примерно 300-400 мс в каждом. Однако, как только я поместил некоторый HTML в представление, для завершения запроса потребовалось немного больше времени, скажем, 600-700 мс.

В целом я бы сказал, что использование Content() может быть немного быстрее, поскольку при его возврате не задействован анализатор Razor.

Комментарии:

1. Определенно быстрее, я установил Glimpse, как вы упомянули, и со сложным рендерингом Razor по сравнению с тем же кодом, который отображается вместе с вычислениями внутри рутинного построения StringBuilder, о котором мы говорим, по крайней мере, в 2 раза быстрее для рендеринга чистого содержимого StringBuilder.