我的问题类似于这一个,但我的问题是Windows共享缓存--而不是更新的Windows缓存。
这真的是个奇怪的问题。我已经设置了一个共享的天蓝色缓存,并在一个托管的云服务上工作。该应用程序同时用于sessionState和caching/outputCache。该应用程序完全没有延迟问题。它与共享缓存一样部署到北中美。
我还有第二个托管服务,它也部署在美国北部。我已经将第二个应用程序配置为使用相同的共享缓存。奇怪的是:当我将web.config中的web.config部分配置为指向共享缓存时,每一个(MVC4) web请求都会减慢到大约5-6秒。当我注释掉这个web.config部分时,web请求的速度要快得多(大约100毫秒)。
缓存连接本身似乎不存在延迟问题,因为我仍然在为sessionState使用相同的共享缓存,而且速度很快。同样值得注意的是,没有一个MVC4操作使用OutputCacheAttribute。通过将outputCache部分添加到web.config并重新部署,可以简单地再现延迟。
这两个应用程序都位于相同的数据中心区域,使用相同的vm大小、实例和osFamilies。我认为他们之间唯一的区别是第一个(没有延迟问题)是MVC3应用程序,而第二个是MVC4应用程序。
为什么简单地添加指向Windows共享缓存的缓存/outputCache配置部分会减慢每个MVC4请求的速度?
更新1:
我现在可以复制这个问题,而不用部署到azure。我将本地VS / IIS安装设置为对会话和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(“~/bundle/mybundle”)之一。看来,outputCache设置在web.config中正在影响捆绑脚本的发布模式呈现。但是为什么?
发布于 2012-11-14 20:52:09
优化框架目前不支持非默认的输出缓存提供程序,因为在过去,这会导致异常,因此在这些情况下,服务器缓存被禁用,导致所看到的高开销。我认为现在我们已经转向了VirtualPathProviders,我们在非默认提供程序中遇到的问题可能已经解决了,我们现在可能能够支持这个场景了。
我在codeplex站点上提交了一个工作项来跟踪以下内容:发行链接
更新:这应该在https://nuget.org/packages/Microsoft.AspNet.Web.Optimization/1.1.0-Beta1中修复
发布于 2012-11-13 22:32:11
我可以证实你的发现。如果我禁用所有的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")https://stackoverflow.com/questions/13363434
复制相似问题