Цикл внутри частичного представления, если вы можете. Каждый раз, когда вы вызываете RenderPartial, происходит следующее (благодаря исходным файлам MVC):
RenderPartial
звонки RenderPartialInternal
RenderPartialInternal
создает новый ViewDataDictionary
и новый ViewContext
RenderPartialInternal
вызывает FindPartialView
для поиска и создания экземпляра представления
FindPartialView
ищет все зарегистрированные движки представления (обычно только один) для представления, используя контекст контроллера и имя представления в качестве ключей. Каждый механизм просмотра ищет представление по всем поддерживаемым им путям, например, Views / controller / view.aspx, Views / controllers / view.ascx, Views / Shared / view.aspx и т. Д. Представления могут быть возвращены из кэша памяти для ускорения этого шага
Вызывается метод представления Render
. Я потерял внутреннюю работу метода Render
стандарта WebFormView
на 13 уровнях вниз по стеку. Render
создает большое количество объектов контекста, необходимых внутреннему представлению, проверяет разрешения для запуска представления, подключает события для любых серверных элементов управления, повторно проверяет объект Request, чтобы решить, что ему еще нужно сделать, и так далее. После фактического рендеринга представление раскручивает созданный им контекст.
В целом, все это не так уж плохо. Все это происходит внутри ЦП и ОЗУ машины, что больше, чем можно сказать о типичном доступе к базе данных, который происходит в контроллере. Процесс должен выходить на диск только при первой загрузке представления (однако это может быть медленным; файлы должны быть найдены, а представление должно быть скомпилировано). ASP.NET MVC пришлось оптимизировать процесс рендеринга представлений, чтобы поддерживать высокий уровень производительности.
Тем не менее, это довольно много, и если вы можете избежать запуска его несколько раз в одном запросе, это поможет улучшить время отклика метода действия.