Мне просто нужно проверить производительность приложения ASP.NET MVC, которое мы создаем. Я собирался вставить частичный вид в цикл, и только из любопытства я проверил, сколько времени потребовалось, чтобы отобразить страницу. Результат был неудачным.
Мне нужно сделать более убедительное расследование, но на всякий случай был кто-то с похожими проблемами или более глубоким пониманием, вот что я до сих пор. Во-первых, я должен сказать, что все результаты и измерения выполнялись после нескольких загрузок страниц и что я установил <compilation debug="false">
в свой web.config.
- Кажется, что один частичный рендеринг берет около 5 мс (по крайней мере, в моей среде). Когда я встраиваю фактическое содержимое частичного представления, я получаю практически 0 мс.
- Когда я включаю пустой частичный вид в цикл из примерно 70 элементов, общее время рендеринга увеличивается на ~ 60 мс. Таким образом, существует некоторое кэширование, но это не идеально.
- Я отлаживал ASP.NET MVC и выяснял, что частичные представления кэшируются, но он кэширует только пути к ascx. Фактические представления затем создаются каждый раз с использованием метода BuildManager.CreateInstanceFromVirtualPath.
- И теперь интересный бит: если включить тот же частичный вид, используя синтаксис WebForms (
<my:UserContol runat="server" />
), дополнительные 60 мс исчезнут.
Поэтому, основываясь на вышеприведенных наблюдениях, кажется, что виновником является метод BuildManager.CreateInstanceFromVirtualPath. Возможно, это не предназначалось для вызова несколько раз. Предполагается, что веб-формы не используют его; или использовать его как-то только один раз для каждого ascx?