ASP.NET MVC - для цикла внутри RenderPartial или вне RenderPartial - PullRequest
3 голосов
/ 26 августа 2009

Какой из них имеет лучшую производительность.У меня есть массив списков, который содержит список статей.Когда я перечисляю статьи, у меня есть RenderPartial, который отображает только одну статью, а родительская страница проходит цикл всех статей.Renderpatial находится внутри цикла родительской страницы.Как лучше всего это сделать?

Ответы [ 2 ]

7 голосов
/ 26 августа 2009

Цикл внутри частичного представления, если вы можете. Каждый раз, когда вы вызываете RenderPartial, происходит следующее (благодаря исходным файлам MVC):

  1. RenderPartial звонки RenderPartialInternal

  2. RenderPartialInternal создает новый ViewDataDictionary и новый ViewContext

  3. RenderPartialInternal вызывает FindPartialView для поиска и создания экземпляра представления

  4. FindPartialView ищет все зарегистрированные движки представления (обычно только один) для представления, используя контекст контроллера и имя представления в качестве ключей. Каждый механизм просмотра ищет представление по всем поддерживаемым им путям, например, Views / controller / view.aspx, Views / controllers / view.ascx, Views / Shared / view.aspx и т. Д. Представления могут быть возвращены из кэша памяти для ускорения этого шага

  5. Вызывается метод представления Render. Я потерял внутреннюю работу метода Render стандарта WebFormView на 13 уровнях вниз по стеку. Render создает большое количество объектов контекста, необходимых внутреннему представлению, проверяет разрешения для запуска представления, подключает события для любых серверных элементов управления, повторно проверяет объект Request, чтобы решить, что ему еще нужно сделать, и так далее. После фактического рендеринга представление раскручивает созданный им контекст.

В целом, все это не так уж плохо. Все это происходит внутри ЦП и ОЗУ машины, что больше, чем можно сказать о типичном доступе к базе данных, который происходит в контроллере. Процесс должен выходить на диск только при первой загрузке представления (однако это может быть медленным; файлы должны быть найдены, а представление должно быть скомпилировано). ASP.NET MVC пришлось оптимизировать процесс рендеринга представлений, чтобы поддерживать высокий уровень производительности.

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

0 голосов
/ 30 июня 2016

Одна вещь, которая улучшит производительность ваших просмотров в несколько раз установить Debug=false в вашем файле web.config (т.е. развернуть в режиме выпуска)

В этом случае механизм MVC будет кэшировать все представления (включая частичные) и не будет пытаться определить их местоположение и загружать их на при каждой попытке их использования.

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