微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.NET(MVC)Outputcache和并发请求

让我们说,理论上,我在我的网站上有一个页面/控制器动作,它做了一些非常重的事情.完成它的操作大约需要10秒钟.

现在,我使用.NET的outputcache机制将其缓存15分钟(例如,我使用[OutputCache(Duration = 900)])如果15分钟后缓存过期并且100个用户再次请求页面,会发生什么?重型加工需要10秒钟?

>繁重的东西只是第一次完成,并且有一些锁定机制,以便其他99个用户将获得缓存结果
>沉重的东西完成了100次(服务器瘫痪,因为它可能需要100 * 10秒)

很容易问题,但我不是百分百肯定.我希望它是第一,但是:-)

谢谢!

解决方法

那么,这取决于你如何配置IIS.如果你的工作线程少于100个(假设是50个),那么“重物”会完成50次,使服务器瘫痪,然后剩下的50个请求将从缓存中提供.

但不,缓存的操作结果没有“锁定机制”;在大多数情况下,这会适得其反.

编辑:我相信这是真的,但尼克的测试说不然,我现在没有时间进行测试.亲自尝试一下!然而,答案的其余部分并不依赖于上述情况,我认为这更重要.

但是,一般来说,任何Web缓存或其他方式的请求都不需要10秒才能返回.如果我在你的鞋子里,我会以某种方式预先计算请求的难点部分.如果要缓存HTML,您仍然可以缓存操作结果,但听起来您的问题比这更大.

你可能也想要consider asynchronous controllers.最后,请注意虽然IIS和ASP.NET MVC不会锁定这个繁重的计算,但你可以.如果您使用异步控制器并结合锁定计算,那么您将有效地获得您要求的行为.如果不了解更多关于你做什么的话,我真的不能说这是最好的解决方案.

原文地址:https://www.jb51.cc/aspnet/248927.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐