MVC新窗口瓶颈

时间:2012-10-10 13:31:26

标签: c# .net asp.net-mvc-3 new-window

我遇到了一个我以前没有的奇怪问题,我想我会在这里询问是否有人有任何建议。

目前,我的应用程序有一个区域可以创建一个新的“录制”(在新窗口中使用Flash模块录制音频),当录制结束时,用户提交表单并且所有音频数据都发布到我的控制器。

此过程的持续时间取决于音频的大小,因此窗口将保持打开状态,直到上传完成然后关闭。

在上传过程中出现问题,如果用户上传了录音并在上传时,尝试打开新窗口(其中填充了“创建录制”视图)和加载新窗口内容会停止,直到上传完成。

如果在实际上传其中一个之前打开创建记录的多个窗口,整个过程工作正常,但是如果我开始上传一个然后尝试打开一个新窗口,那么它将“等待”上传操作在填充新窗口内容之前完成。

1 个答案:

答案 0 :(得分:4)

我认为你遇到了会话问题。

当存在活动会话并且可以修改它时所服务的任何内容(即任何.Net请求,但不包括images / css / etc)将在会话对象上获得独占锁定,直到请求完成。其他可以访问会话的请求将排队,直到锁定被释放。

更多信息here

可以通过指示某些请求仅需要对会话状态的只读访问来解决。有关详细信息,请参阅链接Q的答案。

有一个自定义会话状态模块here的实现可能会大大加快速度。它的工作原理是将会话信息缓存在内存中的哈希表中,然后告诉框架会话访问已经完成。

请注意,这种方法存在潜在的问题,即如果2个页面几乎同时修改会话,则可能会导致竞争条件,以确定哪些修改被保留 - 所以只有在您完全理解其含义时才会这样做