设置会话变量会导致MVC中的FileContentResult呈现缓慢

时间:2014-06-26 21:40:53

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

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

潜在的返回字段之一是条形码的图像,该图像由另一个返回FileContentResult的方法呈现。通常情况下这很好用,它很灵活,性能很好,我甚至没有注意到所有条形码都被渲染和下载,即使在数百行的数据集中也是如此长。

当我使用HttpContext.Current.Session设置会话变量时出现问题,即使是像Session["thingy"] = "thingy";这样简单的事情。当发生这种情况时,条形码图像会严重影响性能。需要一秒钟才能完全加载的结果集现在正受到图像&#34; pop in&#34;点击搜索按钮后最多10秒钟。有几次图像无法加载,给出了#34的影响错误;服务器现在太忙了#34;。

溢出的人是否有任何洞察可能导致此行为的原因?我找到了一个麻烦的解决方法,但它涉及不必要的ajax调用和额外的数据库访问。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

见这里:EnableSessionState = ReadOnly - possible side effects?