加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 04:38:41 所属栏目:asp.Net 来源:网络整理
导读:让我们说,理论上,我在我的网站上有一个页面/控制器动作,它做了一些非常重的事情.完成它的操作大约需要10秒钟. 现在,我使用.NET的outputcache机制将其缓存15分钟(例如,我使用[OutputCache(Duration = 900)])如果15分钟后缓存过期并且100个用户再次请求页面,会
让我们说,理论上,我在我的网站上有一个页面/控制器动作,它做了一些非常重的事情.完成它的操作大约需要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不会锁定这个繁重的计算,但你可以.如果您使用异步控制器并结合锁定计算,那么您将有效地获得您要求的行为.如果不了解更多关于你做什么的话,我真的不能说这是最好的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读