1

我正在维护一个应用程序编写的经典 ASP 托管在 IIS 7.0 上。一段时间以来,当我们连续进行 3 个应该并行发生的 Ajax 调用时,我观察到一个性能问题,但是看起来 IIS 正在串行执行它们。这是一个问题,因为第一个 Ajax 调用是一个耗时的调用,并且没有理由让第二个和第三个查询在它之前返回。

我认为问题在于,在调用期间,会生成会话对象,并且我们正在对每个调用中的会话进行修改。我相信 IIS 因此会序列化 Ajax 调用。

我的问题是,有没有办法因为会话而关闭锁定,但仍然保持会话“打开”,以便我们仍然可以从中读取?我找到了可以使用的 EnableSessionState 属性,但是它完全禁用了会话,这是我不希望发生的。

我知道从长远来看,禁用锁可能不是最好的解决方案,但是在 Ajax 调用之间踩踏变量应该是最小的。非常感谢有关如何解决此问题的任何建议。

4

2 回答 2

1

据我所知,没有办法并行使用会话;它们按照定义是连续的,因为它们在同一个“公寓”(STA)中运行。

如果可能,您可以将值存储在应用程序对象中,因为它在 MTA(多线程)中运行。您可以使用 MSXML2.FreeThreadedDomDocument 来存储每个用户的值(例如,使用存储在 cookie 中的唯一键或类似的东西来获取用户数据)。

于 2012-10-26T06:37:12.160 回答
0

如果您不需要更改任何会话变量,您可以执行以下操作:

使用以下命令创建一个为该页面关​​闭会话状态的新页面:

<%@ EnableSessionState=False %>

将会话中所需的数据输出到主页面,然后在 jQuery 调用中传递该数据。

于 2012-10-26T04:39:12.973 回答