会话锁定导致 ASP.Net 网站速度缓慢

2024-01-06

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

如果您像我一开始一样不明白这其中的含义,那么这基本上意味着以下内容:

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

  • 任何时候UpdatePanel加载缓慢,用户决定在加载之前导航到不同的页面UpdatePanel已经更新完毕...他们不能!ASP.Net 会话锁强制新页面请求等待,直到原始请求完成其极其缓慢的加载。双啊啊!

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

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

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


如果您的页面没有修改任何会话变量,您可以选择退出大部分这种锁定。

<% @Page EnableSessionState="ReadOnly" %>

如果您的页面不读取任何会话变量,您可以选择对该页面完全退出此锁定。

<% @Page EnableSessionState="False" %>

如果您的页面没有使用会话变量,只需在 web.config 中关闭会话状态即可。

<sessionState mode="Off" />

我很好奇,如果不使用锁,您认为“ThreadSafe 集合”会如何实现线程安全?

编辑:我可能应该解释一下“选择退出大部分锁定”的含义。可以同时为给定会话处理任意数量的只读会话或无会话页面,而不会相互阻塞。但是,读写会话页面在所有只读请求完成之前无法开始处理,并且在运行时它必须具有对该用户会话的独占访问权限以保持一致性。锁定单个值是行不通的,因为如果一个页面将一组相关值作为一个组进行更改怎么办?您如何确保同时运行的其他页面能够获得用户会话变量的一致视图?

如果可能的话,我建议您在设置会话变量后尽量减少对它们的修改。这将允许您将大部分页面设为只读会话页面,从而增加来自同一用户的多个同时请求不会相互阻塞的机会。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

会话锁定导致 ASP.Net 网站速度缓慢 的相关文章

随机推荐

  • Google Docs API:文档资源 ID 是否会改变?

    构建一个类似网站的环境 其中所有链接都基于文档中的资源 ID 是否明智 文档 ID 过去是否发生过变化 将来是否会发生变化 上周 我们惊讶地发现一个集合中的某些文档 ID 似乎已更改 这可能吗 id 是条目的唯一 永久标识符 因此它永远不应
  • 使用代理时 Nginx 502 Bad Gateway 错误

    我有一个 Angular 构建和一个 Laravel 后端 提供在一台服务器上运行的 API 我已经在 nginx 中配置了它们 前端有一个到后端服务器的代理 后端在 url 上运行 示例是占位符 http api example com
  • 在react-router v4中使用React IndexRoute

    我正在通过在线教程自己学习 React 这是一个关于使用 React Router 的基本示例
  • SplFileObject 错误无法打开流:没有这样的文件或目录

    我正在尝试在 symfony2 中实现存折网络服务并遵循此存折捆绑 https github com eymengunay PassbookBundle我的控制器看起来像这样 if form gt isValid Create an eve
  • 审计跟踪和实施 SOX/HIPAA/等敏感数据的最佳实践

    我认为自己在应用程序设计方面相对熟练 但我从未接触过敏感数据 我一直想知道审计跟踪的最佳实践是什么以及应该如何实施它们 我现在不必这样做 但如果医疗公司要求我为他们做一些工作 能够自信地与他们交谈 那就太好了 假设我们有一个 学校 数据库
  • 在spring配置文件中设置资源

    我正在尝试在弹簧配置中配置推土机 当使用 xml 配置时 它会像
  • MPI 发送数组的数组

    好的 所以我尝试通过 MPI 发送这样的结构 struct BColumns double B int offset 如果我只是像这样对数据进行一些BS分配 bSet offset myRank bSet B double calloc 2
  • django 基于类的视图 - UpdateView - 如何在处理表单时访问请求用户?

    在 Django 的基于类的 UpdateView 中 我排除了用户字段 因为它是系统内部的 我不会要求它 现在将用户传递到表单的正确 Django 方法是什么 我现在的做法是将用户传递到init表单的 然后重写表单的 save 方法 但我
  • 更改 setup.py 中的输出目录

    我正在使用 setuptools 中的设置来创建setup py 我想知道是否可以以编程方式更改输出目录以将其更改为dist 我知道您可以使用以下命令从命令行执行此操作 dist dir标志 但我希望能够做到within the setup
  • 非公开 API 使用:应用程序包含一个或多个损坏的二进制文件

    我对 iOS 应用程序新版本上传的情况感到非常沮丧 这是故事 日期2018 年 1 月 25 日我们已经上传了新版本3 3 27 内部版本号 1 0 该过程已成功完成并可用于试飞 之后我们发现了一些问题并继续2018 年 1 月 26 日我
  • 如何根据屏幕密度(DPI大小)选择资源?

    我正在尝试根据我的颤振应用程序中的显示密度加载图标 如何根据屏幕密度动态加载 hdpi xhdpi xxhdpi 经过几个小时的搜索 根据官方文档 https flutter dev docs development ui assets a
  • 如何解决“错误的解释器:没有这样的文件或目录”

    我正在尝试运行sh脚本并在 Mac 上收到以下错误 usr bin perl M bad interpreter No such file or directory 我怎样才能解决这个问题 Remove M控制字符 perl i pe y
  • 根据 Angular 反应形式中选择的数字推送迭代行

    当我在下拉列表中选择一个数字时 我在迭代行时遇到问题 我将如何推动该数字 以便根据该数字迭代行 卡 我的流程是这样的 首先您必须将 Solo Traveler 选择为 否 以便出现成人和儿童下拉菜单 该下拉列表是我的问题 我将如何根据所选的
  • 使用 dplyr 与数据库中的日期字段进行数据库连接

    有什么魔力可以使用吗dplyr当数据库有日期字段时访问数据库 A dplyr tbl df将 mysql 日期时间字段转换为 chr 如果我能的话那也不错as Date 他们回来了 但如果我之前这样做collect ing 该表 我收到一个
  • Python Socket 接收/发送多线程

    我正在编写一个Python程序 在主线程中 我使用recv函数连续 循环 通过TCP套接字接收数据 在回调函数中 我使用 sendall 函数通过同一套接字发送数据 什么触发回调是无关紧要的 我已将套接字设置为阻塞 我的问题是 这样做安全吗
  • 从 jersey 迁移到 spring-mvc/rest:ContainerRequestFilter、ContainerResponseFilter

    由于业务需求 我需要从 jersey 迁移到 spring mvc rest 我正在 spring mvc 中搜索相当于 jersey 的东西ContainerRequestFilter ContainerResponseFilter 有任
  • 访问 Oracle Forms/OC4J 中的 URL 参数

    如何访问通过 URL 传递到 Oracle 表单的参数 例如给定网址 a form p1 某事 p2 其他 这将使用 cust 配置启动 a form 表单 但我无法了解如何 或者即使可能 访问p1 值为 something p2 值为 e
  • 如何在数据表中添加图像?

    如何在数据表中添加图像 我尝试了以下代码 Image img new Image img ImageUrl images xx png dr dt NewRow dr column imgdw 但它显示文字System Web UI Web
  • Python Rijndael 加密

    我正在尝试模仿 Rijndael AES 加密http www hanewin net encrypt aes aes test htm http www hanewin net encrypt aes aes test htm在Pytho
  • 会话锁定导致 ASP.Net 网站速度缓慢

    我刚刚发现 ASP Net Web 应用程序中的每个请求都会在请求开始时获取会话锁 然后在请求结束时释放它 如果您像我一开始一样不明白这其中的含义 那么这基本上意味着以下内容 任何时候 ASP Net 网页需要很长时间才能加载 可能是由于数