这就是我的困境。我在MVC应用程序中有一个页面,它使用ajax调用通过局部视图显示搜索结果列表。该模型是表示动态数据集的List<List<string>>
,即用户选择他们想要返回的列以及它们返回的顺序。所有视图都在做一个嵌套循环,它构建了结果表。 / p>
潜在的返回字段之一是条形码的图像,该图像由另一个返回FileContentResult
的方法呈现。通常情况下这很好用,它很灵活,性能很好,我甚至没有注意到所有条形码都被渲染和下载,即使在数百行的数据集中也是如此长。
当我使用HttpContext.Current.Session
设置会话变量时出现问题,即使是像Session["thingy"] = "thingy";
这样简单的事情。当发生这种情况时,条形码图像会严重影响性能。需要一秒钟才能完全加载的结果集现在正受到图像&#34; pop in&#34;点击搜索按钮后最多10秒钟。有几次图像无法加载,给出了#34的影响错误;服务器现在太忙了#34;。
溢出的人是否有任何洞察可能导致此行为的原因?我找到了一个麻烦的解决方法,但它涉及不必要的ajax调用和额外的数据库访问。
答案 0 :(得分:0)
所以问题是,只要会话中存储了任何内容,IIS就会同步处理请求。因此,我对条形码操作的所有调用都在等待,直到最后一个完成后再继续,因此弹出窗口。
答案是在Alexei发布的this link中。奇怪的是,这是最简单的答案提供了最简单的解决方案。我为我的图像创建了一个新的控制器并将条形码渲染操作重构为它,然后使用[SessionState(SessionStateBehavior.Disabled)]
修饰控制器,迫使IIS将对控制器中的操作的任何请求视为异步。
答案 1 :(得分:0)
前一段时间我遇到了同样的问题。通过在我的web.config中将EnableSessionState设置为ReadOnly来修复它。
我认为它可能会产生一些负面影响但到目前为止还没有。甚至在SO中发布了一个问题,寻找评论。