Мой вопрос похож на этот вопрос, но моя проблема связана с общим кэшированием Windows Azure, а не с более новым кэшированием Windows Azure.
Это действительно странная проблема. У меня есть общий кэш Azure, настроенный и работающий в одной размещенной облачной службе. Приложение использует его как для sessionState
, так и для caching/outputCache
. У этого приложения вообще нет проблем с задержкой. Он развернут в Северо-Центральной части США, как и общий кэш.
У меня также есть второй размещенный сервис, который также развернут в Северо-Центральной части США. Я настроил это второе приложение для использования одного и того же общего кеша. Вот что странно: когда я настраиваю раздел <caching>/<outputCache>
в файле web.config, чтобы он указывал на общий кеш, каждый отдельный (MVC4) веб-запрос замедляется примерно до 5-6 секунд. Когда я комментирую этот раздел web.config, веб-запросы выполняются намного быстрее (~ 100 миллисекунд).
Это не похоже на проблему задержки с самим подключением к кешу, потому что я все еще использую тот же общий кеш для sessionState, и это быстро. Также следует отметить, что ни одно из действий MVC4 не использует атрибут OutputCacheAttribute. Задержку можно воспроизвести, просто добавив раздел outputCache в файл web.config и повторно развернув его.
Оба приложения находятся в одних и тех же регионах центра обработки данных, используют одни и те же размеры виртуальных машин, экземпляры и osFamilies. Единственное различие между ними, о котором я могу думать, заключается в том, что первое (тот, у которого нет проблем с задержкой) — это приложение MVC3, а второе — приложение MVC4.
Почему простое добавление раздела конфигурации caching/outputCache, указывающего на общий кэш Windows Azure, замедляет каждый отдельный запрос MVC4?
Обновление 1:
Теперь я могу воспроизвести эту проблему без развертывания в Azure. Я настроил свою локальную установку VS/IIS Express для использования рассматриваемого общего кеша как для сеанса, так и для outputCache. Я получал ответы меньше секунды, пока не изменил этот параметр web.config:
<compilation debug="false" ... <!-- changed this from true to false
При отключении отладочных хуков в разделе system.web я стал получать время отклика 5-6 секунд (воспроизведено). Может ли это быть проблемой с функциями связывания и минимизации в MVC4? ОЧЕНЬ странно, что отключение компиляции отладки увеличивает задержку ответа примерно в 10 раз.....
Обновление 2:
MiniProfiler говорит мне, что да, более 4 секунд этой задержки исходит от одного из моих @Scripts.Render("~/bundles/mybundle") в MVC _Layout.cshtml. Похоже, что параметр outputCache в файле web.config влияет на рендеринг связанных скриптов в режиме выпуска. Но ПОЧЕМУ?