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

标签 asp.net asp.net-mvc outputcache

从理论上讲,我的网站上有一个页面/ Controller 操作,它执行一些非常繁重的工作。完成操作大约需要10秒钟。

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

  • 繁重的工作仅在第一次完成,并且有一些锁定机制,因此其他99个用户将获得缓存结果
  • 繁重的工作完成了100次(服务器瘫痪,因为它可能需要100 * 10秒的时间)

  • 可能会问一个简单的问题,但我不确定100%。我希望它是第一,但:-)

    谢谢!

    最佳答案

    好吧,这取决于您如何配置IIS。如果您的工作线程少于100个(例如50个),那么“繁重的工作”将执行50次,使您的服务器瘫痪,然后其余50个请求将从缓存中得到处理。

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

    编辑:我相信这是对的,但是Nick的测试则相反,并且我现在没有时间进行测试。自己尝试!不过,答案的其余部分并不依赖于上述内容,我认为这更为重要。

    但是,一般而言,没有任何Web请求(无论是否缓存)都需要10秒才能返回。如果我不满意,我会考虑以某种方式预先计算请求的困难部分。如果要缓存HTML,您仍然可以缓存操作结果,但是听起来您的问题要大得多。

    您可能还想consider asynchronous controllers。最后,请注意,尽管IIS和ASP.NET MVC不会锁定这种繁重的计算,但是您可以。如果将异步 Controller 与对计算的锁定结合使用,则可以有效地获得所需的行为。如果不进一步了解自己的工作,我无法真正说出这是否是最好的解决方案。

    关于ASP.NET(MVC)Outputcache和并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162433/

    相关文章:

    c# - Windows 身份验证在部署 MVC 站点时不起作用

    c# - 将 ASP.Net GridView 从一个页面传递到另一个页面

    asp.net-mvc - 为什么 DropDownListFor 无法识别我的编辑器模板中的选定值?

    asp.net-mvc - 在 IIS7 中运行时无法在 ASP.NET MVC View 中放置断点

    javascript - ASP.NET - 如何更改 JSON 序列化的方式?

    asp.net - 一个网站多个​​应用程序池

    c# - 如何使用 RedirectToAction 方法添加查询字符串值?

    asp.net - 使用 Page.Render 覆盖进行后缓存替换

    c# - OutputCache VaryByParam 因不应包含的参数而异

    asp.net-mvc - asp.net mvc 4 中移动设备的显示模式和 ipad 的桌面 View