在asp.net中使用太多会话的缺点

在ASP.NET中,会话使我们能够在用户在Web应用程序中导航ASP.NET页面时为用户存储和检索值.但是,不鼓励使用过多的会话.为什么?使用太多会话有什么缺点?

感谢那些愿意回答的人.

解决方法

记忆和/或表现

如果存储会话状态进程(默认值),则所有会话数据都存储在应用程序池的本地内存中.如果您有数千名用户,您可以看到为什么这可能是一个问题.当开发人员不再需要删除会话变量时,问题会变得更糟(由于很难控制访问网页的顺序)和/或用户不这样做显式注销(例如,通过关闭浏览器窗口),这使得所有这些内存仍然分配但不再使用.

如果将会话状态存储在进程外(例如,在SQL Server或单独的状态服务器中),则所有会话变量最终都会越过网络.随着您添加更多变量,越来越多的数据必须被拉过来.这最终可能会降低性能.

并发

如果Web应用程序使用会话状态,则必须保护访问会话状态的数据免受竞争条件和其他多线程问题的影响.因此,ASP.NET会自动序列化任何使用会话的请求.如果您同时发送两个请求,ASP甚至不会在第二个请求启动,直到第一个请求完成.这可能会导致使用大量AJAX或其他应该是异步的逻辑的应用程序出现意外和性能不佳的情况.

基础设施

如果您使用本地内存进行会话状态,并且您的Web应用程序是负载平衡的,则负载均衡器必须使用IP地址或cookie强制执行会话粘性.这会以负责处理请求的方式限制负载均衡器 – 特定会话的所有请求始终命中同一服务器 – 这会降低整体性能并消除冗余.

数据丢失

如果应用程序池循环使用,则该应用程序池上运行的所有会话都将失去会话状态,通常需要用户注销并重新开始.

代码设计不佳

会话变量本质上是全局变量.过度使用全局变量往往会导致代码结构松散.变量应始终尽可能紧密地限定范围.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...