Session使用的优化

 ASP.NET 里面 SessionState有三种可以选择的模式 

方式

说明

优点

缺点

InProc

会话值在aspnet_wp.exe w3wp.exe的内存中保持为活动对象。这是默认选项。

性能最好

W3WP 进程 死掉 或者进程回收后,Session信息将会丢失。

 

占用Web 服务器的内存用于保存Session信息

 

StateServer

会话值被序列化并存储在单独进程 (aspnet_state.exe) 的内存中。该进程还可以在其他计算机上运行。

在负载均衡条件下,可以为多个Web 服务器维护Session信息

 

W3WP 进程 死掉 或者进程回收后,Session信息不会丢失

 

性能比InProc方式差

SQL Server

会话值被序列化并存储在 SQL Server 表中。SQL Server 的实例可以在本地运行,也可以远程运行

在负载均衡条件下,为多个Web 服务器维护Session信息

 

W3WP 进程 死掉 或者进程回收后,Session信息不会丢失

 

Web服务器死机或者重新启动后,Session信息不会丢失.

 

性能比InProc方式差

缺省情况下 每个页面需要操作两次SQL Server 数据库操作。第一次读取Session,第二次写入Session.

关于ASP.NET 1.1 SessionState 的实现,可以参考下面的文章
http://www.microsoft.com/china/msdn/archives/library/dnaspp/html/ASPNetSessionState.asp

  •   页面的EnableSessionState开关

 有很多页面里面只需要从Session里面读取数据的而不需要写入数据到Session, 对于这些页面我们可以将页面标记为<%@ Page EnableSessionState="ReadOnly" . . .%>。这样可以将页面执行时对SQL Server 数据库操作由两次减少为一次。
对于不需要使用Session的页面我们可以将页面标记为<%@ Page EnableSessionState="False" . . .%>

  •  减少Sesson 里面存放的数据量
由于Web Server 与存放SessionStateServer之间是通过网络来进行通信的而且在缺省情况每个页面需从StateServer里面读取一次Session数据,写入一次Session数据。通过减少Session里面存放的数据能够使系统的性能获得提高。
posted @ 2007-02-20 19:23  Yonglun  阅读(563)  评论(0编辑  收藏  举报