asp.net - session 状态阻止并发处理的异步 ajax 调用

标签 asp.net session jquery pagemethods

我试图在 document.ready 上同时对我的 .NET 页面方法进行 6 个异步 jQuery ajax 调用,以从数据库请求不同的数据集,然后将其呈现为图表给用户。

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

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

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

有人可以帮忙并指出我正确的方向吗?我已经花了几天时间来调查这个页面的低效率问题,但仍然没有找到一个好的方法。

提前致谢

最佳答案

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

我很好奇为什么你的 session 对象不可序列化。我能想到的唯一解决方案是使用数据库表来存储您在 session 中保留的用户特定数据,然后仅在更新用户数据时保留数据库锁。

您可以使用 ASP.NET session ID 或其他唯一的 Cookie 值作为数据库 key 。

关于asp.net - session 状态阻止并发处理的异步 ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236885/

相关文章:

C# 设计模板容器?

asp.net - 将字典的字典传递给 javascript (.NET)

android - { session 状态 :OPENING, token :{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:1xxxxxxxxxxx}

java - 为什么session.invalidate在IE浏览器中不起作用?

jquery - 如何获取服务器上的jquery/ajax参数

c# - 使用 ASP.NET 和 AngularJS 的简单主页

ASP.NET 代码隐藏文件未嵌套在 Visual Studio 中的相关 aspx 文件下

java - 如何处理多个连续的表单和 Java 对象

javascript - e.preventDefault 不阻止提交

javascript - 如何使用 jQuery 选择没有类或 ID 的文本?