我刚刚发现 ASP.Net Web 应用程序中的每个请求在请求开始时都会获得一个会话锁,然后在请求结束时释放它!
万一这对你的影响,就像一开始对我一样,这基本上意味着以下内容:
任何时候 ASP.Net 网页需要很长时间才能加载(可能是由于数据库调用缓慢或其他原因),并且用户决定他们想要导航到不同的页面,因为他们厌倦了等待,他们不能!ASP.Net 会话锁强制新页面请求等待,直到原始请求完成其令人痛苦的缓慢加载。啊。
任何时候 UpdatePanel 加载缓慢,并且用户决定在 UpdatePanel 完成更新之前导航到不同的页面......他们不能!ASP.net 会话锁强制新页面请求等待原始请求完成其令人痛苦的缓慢加载。双Arrrgh!
那么有哪些选择呢?到目前为止,我想出了:
我真的不敢相信 ASP.Net 微软团队会在 4.0 版本的框架中留下如此巨大的性能瓶颈!我错过了什么明显的东西吗?为 Session 使用 ThreadSafe 集合有多难?
好的,对 Joel Muller 的所有投入都给予了极大的支持。我的最终解决方案是使用这篇 MSDN 文章末尾详述的自定义 SessionStateModule:
http://msdn.microsoft.com/en- us/library/system.web.sessionstate.sessionstateutility.aspx
这是:
这对我们的应用程序“敏捷”的感觉产生了巨大的影响。我仍然无法相信 ASP.Net Session 的自定义实现会锁定整个请求的会话。这给网站增加了如此多的迟缓。从我必须做的大量在线研究(以及与几位真正有经验的 ASP.Net 开发人员的对话)来看,很多人都遇到过这个问题,但很少有人能找到原因。也许我会写一封信给Scott Gu…
我希望这可以帮助一些人!