我刚刚发现了所有ASP.NET网站速度慢的原因,我正在想办法解决这个问题。
我刚刚发现ASP.NETWeb应用程序中的每个请求在请求开始时都会获得一个会话锁,然后在请求结束时释放它!
如果你失去了这方面的影响,就像最初对我一样,这基本上意味着以下几点:
任何时候,ASP.NET网页都需要很长时间来加载(可能是由于数据库调用缓慢或其他原因),用户决定要导航到另一个页面,因为他们厌倦了等待,他们不能!ASP.NET会话锁强制新页请求等待,直到原始请求完成其缓慢的加载。阿罗。
当UpdatePanel加载缓慢时,用户决定在UpdatePanel完成更新之前导航到另一个页面.他们不能!ASP.NET会话锁强制新的页请求等待,直到原始请求完成其痛苦的缓慢加载。双重阿罗!
那么有什么选择呢?到目前为止,我已经想出:
- 实现ASP.NET支持的自定义SessionStateDataStore。我还没有找到太多可以复制的东西,而且似乎风险很高,而且很容易搞砸。
- 跟踪所有正在进行的请求,如果来自同一用户的请求来自同一个用户,则取消原始请求。看起来有点极端,但它会起作用的(我想)。
- 不要用会话!当我需要用户某种状态时,我可以使用Cache代替,以及通过身份验证的用户名上的关键项,或者其他类似的东西。又有点极端了。
我真不敢相信ASP.NETMicrosoft团队会在4.0版的框架中留下如此巨大的性能瓶颈!我漏掉了什么明显的东西吗?在会话中使用线程安全集合有多难?