4

我的问题与类似,但我的问题是 Windows Azure 共享缓存——而不是较新的 Windows Azure 缓存。

这真是一个奇怪的问题。我有一个共享的 Azure 缓存设置并在一个托管的云服务上工作。该应用程序同时使用它sessionStatecaching/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 设置似乎正在影响捆绑脚本的发布模式呈现。但是为什么?

4

2 回答 2

3

优化框架目前不支持非默认输出缓存提供程序,因为在过去这会导致异常,因此在这些情况下,服务器缓存被禁用,这会导致您看到的高开销。我认为现在我们已经转向 VirtualPathProviders,我们在使用非默认提供程序时遇到的问题可能会得到解决,并且我们现在可能能够支持这种情况。

我在我们的 codeplex 网站上提交了一个工作项来跟踪这个:问题链接

更新:这应该在 https://nuget.org/packages/Microsoft.AspNet.Web.Optimization/1.1.0-Beta1中修复

于 2012-11-14T20:52:09.493 回答
1

我可以证实你的发现。如果我禁用所有 CSS/脚本捆绑/缩小,我不会遇到 CPU 峰值和缓慢。显然,这是由于捆绑和/或缩小的原因。

这就是我的 _Layout.cshtml 中的内容。删除它 = 没有 CPU 问题。包括它会导致 CPU 峰值/缓慢。

@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/kendoui")
于 2012-11-13T22:32:11.523 回答