Session使用的优化
方式 |
说明 |
优点 |
缺点 |
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 里面存放的数据量