小编典典

我刚刚发现了为什么所有 ASP.Net 网站都很慢,我正在尝试解决这个问题

all

我刚刚发现 ASP.Net Web 应用程序中的每个请求在请求开始时都会获得一个会话锁,然后在请求结束时释放它!

万一这对你的影响,就像一开始对我一样,这基本上意味着以下内容:

  • 任何时候 ASP.Net 网页需要很长时间才能加载(可能是由于数据库调用缓慢或其他原因),并且用户决定他们想要导航到不同的页面,因为他们厌倦了等待,他们不能!ASP.Net 会话锁强制新页面请求等待,直到原始请求完成其令人痛苦的缓慢加载。啊。

  • 任何时候 UpdatePanel 加载缓慢,并且用户决定在 UpdatePanel 完成更新之前导航到不同的页面......他们不能!ASP.net 会话锁强制新页面请求等待原始请求完成其令人痛苦的缓慢加载。双Arrrgh!

那么有哪些选择呢?到目前为止,我想出了:

  • 实现 ASP.Net 支持的自定义 SessionStateDataStore。我没有找到太多可以复制的东西,而且看起来风险很高,而且很容易搞砸。
  • 跟踪所有正在进行的请求,如果请求来自同一用户,则取消原始请求。似乎有点极端,但它会起作用(我认为)。
  • 不要使用会话!当我需要用户的某种状态时,我可以只使用缓存,并在经过身份验证的用户名上使用关键项,或者类似的东西。再次显得有些极端。

我真的不敢相信 ASP.Net 微软团队会在 4.0 版本的框架中留下如此巨大的性能瓶颈!我错过了什么明显的东西吗?为 Session 使用
ThreadSafe 集合有多难?


阅读 110

收藏
2022-04-26

共1个答案

小编典典

好的,对 Joel Muller 的所有投入都给予了极大的支持。我的最终解决方案是使用这篇 MSDN 文章末尾详述的自定义
SessionStateModule:

http://msdn.microsoft.com/en-
us/library/system.web.sessionstate.sessionstateutility.aspx

这是:

  • 实施起来非常快(实际上似乎比使用提供者路线更容易)
  • 使用了很多开箱即用的标准 ASP.Net 会话处理(通过 SessionStateUtility 类)

这对我们的应用程序“敏捷”的感觉产生了巨大的影响。我仍然无法相信 ASP.Net Session
的自定义实现会锁定整个请求的会话。这给网站增加了如此多的迟缓。从我必须做的大量在线研究(以及与几位真正有经验的 ASP.Net
开发人员的对话)来看,很多人都遇到过这个问题,但很少有人能找到原因。也许我会写一封信给Scott Gu…

我希望这可以帮助一些人!

2022-04-26