【问题标题】:Setting session variable causes slowness in FileContentResult rendering in MVC设置会话变量会导致 MVC 中 FileContentResult 呈现缓慢
【发布时间】:2014-06-29 01:33:04
【问题描述】:

这是我的困境。我在 MVC 应用程序中有一个页面,该页面使用 ajax 调用通过部分视图显示搜索结果列表。该模型是一个List<List<string>>,代表一个动态数据集,即用户选择他们想要返回的列以及返回的顺序。视图所做的只是一个嵌套循环,用于构建结果表。

其中一个潜在的返回字段是条形码图像,该图像由另一个返回FileContentResult 的方法呈现。通常这很好用,它既流畅又高效,以至于我根本没有注意到所有正在渲染和下载的条形码,即使在数百行长的数据集中也是如此。

当我使用HttpContext.Current.Session 设置会话变量时出现问题,即使是像Session["thingy"] = "thingy"; 这样简单的东西。发生这种情况时,条形码图像会严重影响性能。需要一秒钟才能完全加载的结果集现在在点击搜索按钮后会出现长达 10 秒的图像“弹出”问题。有几次图片加载失败,出现“服务器现在太忙”的错误。

溢出地的任何人都知道可能导致这种行为的原因吗?我找到了一个笨拙的解决方法,但它涉及不必要的 ajax 调用和额外的数据库访问。

【问题讨论】:

  • 锁定对 SqlSessionState 的访问?
  • 没有。对不起,我应该更清楚。我正在使用 HttpContext.Current.Session 对象。我会更新的。
  • Alexei 询问您的会话状态是存储在 Sql Server 上还是进程内?
  • 无论您如何访问Session,重要的是您使用SqlSession 还是内存中的站点。 Sql 1 将锁定请求,直到前一个请求完成并超时。看看这个 - stackoverflow.com/questions/1464203/…
  • 知道了。我正在使用内存。我的工作场所还​​没有设置 SQL 会话。

标签: c# ajax asp.net-mvc asp.net-mvc-4 session


【解决方案1】:

所以问题在于,只要会话中存储了任何内容,IIS 就会同步处理请求。因此,我对条形码操作的所有调用都在等到最后一个调用完成后再继续,因此弹出。

答案在 Alexei 发布的 this link 中。奇怪的是,它是提供最简单解决方案的最被否决的答案。我为我的图像创建了一个新控制器,并将条形码渲染动作重构到其中,然后用[SessionState(SessionStateBehavior.Disabled)] 装饰控制器,强制 IIS 将控制器中对动作的任何请求视为异步。

【讨论】:

    【解决方案2】:

    不久前我遇到了同样的问题。通过在我的 web.config 中将 EnableSessionState 设置为 ReadOnly 来修复它。

    我认为它可能会产生一些负面影响,但目前还没有。甚至在寻找 cmets 的 SO 中发布了一个问题。

    请看这里:EnableSessionState = ReadOnly - possible side effects?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2021-04-09
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多