4

我正在尝试在 document.ready 上一次对我的 .NET 页面方法进行 6 次异步 jQuery ajax 调用,以从数据库中请求不同的数据集,并以图表形式返回给用户。

问题是当一个图表需要很长时间生成时,它会锁定接下来 5 个图表的生成,例如,当每个图表需要 1 分钟生成时,用户将等待大约 6 分钟,而不是 1 - 2我认为在使用异步 ajax 调用和页面方法时会并行处理的分钟。

在阅读了这个论坛的很多有用的帖子后,我发现这是因为我必须在页面方法中读取和写入会话对象,而 asp.net 会锁定整个请求,从而使它们按顺序运行。

我看到有人建议在@Page 标签中将会话状态设置为只读,但这不会解决我的问题,因为我也需要写入会话。我考虑过从 inProc 会话转移到 sql 数据库会话,但是我的会话对象不可序列化并且在整个项目中使用。我也不能改为使用缓存,因为会话包含用户特定的详细信息。

任何人都可以帮助并指出正确的方向吗?我花了几天的时间来调查这个页面效率低下,但还没有找到一个好的方法。

提前致谢

4

2 回答 2

2

根据我的个人经验,切换到 SQL 会话不会解决这个问题,因为所有并发线程都会阻塞在 SQL 中,因为第一个线程将在数据库中的一个或多个行上持有排他锁。

我很好奇为什么您的会话对象不可序列化。我能想到的唯一解决方案是使用数据库表来存储您在会话中保持的用户特定数据,然后只要您需要更新用户数据,就只持有数据库锁。

您可以使用 ASP.NET 会话 ID 或其他唯一的 cookie 值作为数据库键。

于 2012-06-28T01:21:08.803 回答
1

问题可能根本不是服务器端。

浏览器对它们将发出多少并发 HTTP 请求有一个内置限制 - 这是 HTTP/1.1 规范的一部分,该规范建议限制为 2。

在 IE7 中限制为 2。在 IE8 中为 6。但是当页面加载时,由于对 CSS、JS、图像等的并发请求,您很容易达到 6。

关于这些限制的一个很好的信息来源是BrowserScope(请参阅每个主机名列的连接数)。

将这 6 个请求合并为 1 个请求怎么样?这也会加载得更快一些。

于 2012-06-28T01:59:07.457 回答