我的问题与此类似,但我的问题是 Windows Azure 共享缓存——而不是较新的 Windows Azure 缓存。
这真是一个奇怪的问题。我有一个共享的 Azure 缓存设置并在一个托管的云服务上工作。该应用程序同时使用它sessionState
和caching/outputCache
. 该应用程序根本没有延迟问题。它被部署到美国中北部,共享缓存也是如此。
我还有第二个托管服务,它也部署到美国中北部。我已将第二个应用程序配置为使用相同的共享缓存。奇怪的是:当我<caching>/<outputCache>
在 web.config 中配置部分以将其指向共享缓存时,每个 (MVC4) Web 请求都会减慢到大约 5-6 秒。当我注释掉这个 web.config 部分时,Web 请求要快得多(约 100 毫秒)。
缓存连接本身似乎不是延迟问题,因为我仍在为 sessionState 使用相同的共享缓存,而且速度很快。另外值得注意的是,没有一个 MVC4 操作使用 OutputCacheAttribute。只需将 outputCache 部分添加到 web.config 并重新部署即可重现延迟。
两个应用程序位于相同的数据中心区域,使用相同的 vm 大小、实例和 osFamilies。我能想到的它们之间的唯一区别是第一个(没有延迟问题的)是 MVC3 应用程序,而第二个是 MVC4 应用程序。
为什么简单地添加指向 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 秒的延迟来自我在 MVC _Layout.cshtml 中的 @Scripts.Render("~/bundles/mybundle") 之一。web.config 中的 outputCache 设置似乎正在影响捆绑脚本的发布模式呈现。但是为什么?