Session、Application和Cache的性能

     Session、Application和Cache的使用会影响系统的性能。

     1、Session

     如果应用程序中不使用的话,要禁用页面的会话状态,ASP.NET默认是启用会话状态,可以在@Page指令中设置EnableSessionState属性:

显示行号 复制代码
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" EnableSessionState="False" %>

      Enable属性对Cache或Application对象没有影响。该属性只适用于具体的Web页面(或继承该页面的用户控件)。如果把EnableSessionState属性设置false时,设置或检索会话变量时,会抛出页面异常。根据页面的大小,EnableSessionState为true时,会增加页面加载的时间,因为ASP.NET需要纯利Session对象的状态管理开销。

      如果ASP.NET页面要求访问会话变量但从不操作这些变量,页面只访问Session而不设置Session,可以设置EnableSessionState为”ReadOnly” 。

      可以通过Web.config文件设置Session状态:

显示行号 复制代码
  1. <configuration>
        <system.web>
            <sessionState mode="Off"/>
        </system.web>
    </configuration>

       在ASP.NET中,存储会话状态信息的方式有很大的灵活性。默认情况下,ASP.NET使用In-Proc的模式存储会话状态,也就是用来执行ASP.NET工作者进程(aspnet_wp.exe)的同一个进程内。

      存储会话状态信息方式二,使用状态服务器,在本地Web服务器上的一个外部状态服务器进程上,或者在一个远程服务器的存储会话状态。状态芙蓉区器其实是一个aspnet_state.exe的Windows服务,在安装了.NET的任何机器上都可以使用Windows Services进行管理。要把会话状态模式改为状态服务器,对于一个特定的Web,可以编辑Web.config文件,或者在Machine.Config文件中把它设为机器上的所有Web的默认模式。

显示行号 复制代码
  1. <configuration>
        <system.web>
            <sessionState mode="StateServer" stateConnectionString="127.0.0.1:42424"/>
        </system.web>
    </configuration>

      状态服务器必须启动ASP.NET State Service服务,服务器默认使用42424端口,该端口必须在Web服务器和状态服务器之间必须是打开的,可以通过修改注册表修改端口值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\aspnet_state\Parameters\Port。使用状态服务器相对于In-Proc的模式有性能的损失,数据必须在跨进程或连接到远程服务器进行存储和检索,在ASP.NET必须串行化和反串行化数据,并在ASP.NET Web应用程序和状态服务之间提供跨进程的数据编组。

      模式三:SQL Server。该模式把会话状态信息存储在一个专为状态管理创建的SQL Server数据库中。SQL Server会话状态模式是这三种方法最慢的一种,但它最强壮,几乎不会使Session丢失。

显示行号 复制代码
  1. <configuration>
        <system.web>
           <sessionState mode="SQLServer" sqlConnectionString="server=.;uid=sa;pwd="/> 
  2.     </system.web>
    </configuration>

       Session的生命周期,生命周期在Web.config或Machine.config配置文件中是可配置的,timeout(已分钟为单位)。

显示行号 复制代码
  1. <configuration>
        <system.web>
           <sessionState timeout=”20”/> 
  2.     </system.web>
    </configuration>

       在应用程序优化会话状态的生命周期需要对使用性做仔细的分析和推测,要在重新创建存储在会话状态中的值所需的时间和由于引用实质上是被缓存的值的性能增益之间寻找平衡。如果想把一个自定义的对象(引用类型)的值存储到会话状态,ASP.NET在把对象保存到状态中检查它的结构,使用一个优化存储空间的算法存储该对象,并确保特定类型处于字节边界之内,当恢复这个信息是,ASP.NET需要创建对象的一份副本以检查它的结构,然后以相反的顺序执行相同的存储过程。

posted @ 2010-04-25 23:36  Asharp  阅读(2104)  评论(0编辑  收藏  举报