Проблема производительности провайдера MvcSiteMap

Я использую провайдера динамических узлов, который содержит в общей сложности 6000 узлов. При первом обращении к бритвенному представлению, содержащему @Html.MvcSiteMap().SiteMapPath(), загрузка страницы может занять до 7500 мс.

Все время занято в этом вызове, так как при профилировании моего кода в провайдере динамического узла это занимает 28 мс.

Если я уберу все динамические узлы в mvc.sitemap, код вернется очень быстро 280 мс.

Есть ли способ предварительно загрузить это - я использую IIS 7 и поэтому не могу использовать модуль прогрева приложения или новую часть прогрева запуска приложения, если IIS 7.5.

Я использую последнюю версию NuGet 3.2.1

1 ответ

Решение

Производительность была значительно улучшена в MvcSiteMapProvider v4 благодаря нескольким улучшениям:

  1. Внутренние словари теперь используют дженерики, а не HashTable (который использует System.Object).
  2. Переданный тип теперь ISiteMapNode, поэтому его больше не нужно приводить перед использованием.
  3. Кэш был полностью переработан, чтобы использовать преимущества точки расширения System.Runtime.Caching.ObjectCache.NET.
  4. Модуль ACL был оптимизирован для более быстрого выполнения.
  5. Кэширование запросов теперь выполняется автоматически при некоторых дорогостоящих операциях.
  6. Меню и карта сайта были переработаны, чтобы вызывать модуль ACL только при необходимости.
Другие вопросы по тегам