Проблема производительности провайдера MvcSiteMap
Я использую провайдера динамических узлов, который содержит в общей сложности 6000 узлов. При первом обращении к бритвенному представлению, содержащему @Html.MvcSiteMap().SiteMapPath(), загрузка страницы может занять до 7500 мс.
Все время занято в этом вызове, так как при профилировании моего кода в провайдере динамического узла это занимает 28 мс.
Если я уберу все динамические узлы в mvc.sitemap, код вернется очень быстро 280 мс.
Есть ли способ предварительно загрузить это - я использую IIS 7 и поэтому не могу использовать модуль прогрева приложения или новую часть прогрева запуска приложения, если IIS 7.5.
Я использую последнюю версию NuGet 3.2.1
1 ответ
Производительность была значительно улучшена в MvcSiteMapProvider v4 благодаря нескольким улучшениям:
- Внутренние словари теперь используют дженерики, а не HashTable (который использует System.Object).
- Переданный тип теперь ISiteMapNode, поэтому его больше не нужно приводить перед использованием.
- Кэш был полностью переработан, чтобы использовать преимущества точки расширения System.Runtime.Caching.ObjectCache.NET.
- Модуль ACL был оптимизирован для более быстрого выполнения.
- Кэширование запросов теперь выполняется автоматически при некоторых дорогостоящих операциях.
- Меню и карта сайта были переработаны, чтобы вызывать модуль ACL только при необходимости.