2009-08-25 2 views
3

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

ответ

7

Петля внутри частичного обзора, если можете. Каждый раз, когда вы звоните 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

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

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

Смежные вопросы