【整理】asp.net2.0网站性能优化解决方案

    关于asp.net应用程序性能优化,似乎是一个讨论不完的问题,网上关于这方面的解决方案也比较多,我只简单的提一下,在这里我主要说一下session的三种不同的解决方案。

    针对asp.net应用程序性能优化的一般性解决方案大致有以下方式:

    (1)避免页面与服务器过多的往返过程,这就要求合理的使用IsPostBack以及服务器控件。

    (2)避免过多的服务器控件ViewState,可分别针对控件级、页面级和应用程序级来关闭和开启。

    (3)在未使用会话时关闭会话状态

         a 并不是所有的页面和应用程序都要使用会话状态,你可以在不使用会话状态的页面将其关闭

         b 如果页面只访问会话,但不打算修改它们,可以将其设置为只读

    (4)数据访问

         a 使用存储过程用于数据访问

         b 使用SqlDataReader获得快进的只读数据流

     (5)有选择性的缓存那些不易变化数据和页输出

         a 不要缓存的太多

         b 缓存的时间不要太短

     (6)大型Web应用程序,可以先预编译它

     (7)在网站发布时禁用调试模式

     (8)尽可能避免使用try catch语句来作为判断逻辑

     (9)大量字符串连接请使用StringBuilder,不要使用+

     以上方式主要是我采取的优化方式,所以先写出来,肯定不全,网上有很多,又需要的可以自行去谷歌或百度搜索,在这里我就不在赘述了。好了言归正传,接下来就到了本篇文章核心部分了,且听我慢慢道来。

     asp.net为我们提供了三种(我所知道的)保存会话的方式,具体如下:

     第一种,保存在内存中,也叫做进程内会话状态,这也是速度最快的解决方案,主要用于存放少量易失数据。这种也是我们最常用的一种方式,默认就是使用的这种方式。在Web.config中的配置 <sessionState mode="InProc"/>。

     第二种,window服务的进程外会话状态,首先要开通操作系统的"Asp.Net状态服务",开通方法如下:"开始">>"所有程序">>"管理工具">>"服务">>"Asp.Net状态服务">>"启用",此服务默认端口为42424。在Web.config中的配置:<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424"/>,示例代码如下:

     web.config中

<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424"></sessionState>

      前端代码

    public partial class SessionStateTest : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            
if (!IsPostBack)
            {
                
this.Session.Add("name""zhangsan");
                
this.Session.Add("sex""nan");
            }
        }

        
protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(
string.Format("姓名:{0},性别:{1}",Session["name"].ToString(),Session["sex"].ToString()));
        }
    }

 

     第三种,SQL数据库的进程外会话状态,这主要用于跨多个处理器或多个计算机缩放应用程序Web花园和Web农场以及当服务器进程重新启动时不能丢失数据的情况。此方式首先要在数据库创建一个名为ASPState的数据库,创建方式如下:

     在Visual Studio命令提示符下输入aspnet_regsql.exe -S [servername] -U [username] -P [password] -ssadd -sstype p

     在Web.config中的配置

<sessionState mode="SQLServer" allowCustomSqlDatabase="false"  sqlConnectionString="data source=[servername];uid=[username];pwd=[password]"/>,

     其中红色字体表示是否允许使用自定义数据库来保存会话,这里为false表示不允许。示例代码如下

     web.config中

<sessionState mode="SQLServer" allowCustomSqlDatabase="false" sqlConnectionString="data source=jewleo\sql2005;uid=sa;pwd=sa;"></sessionState>

     前端调用

    public partial class SessionStateTest : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            
if (!IsPostBack)
            {
                
this.Session.Add("name""zhangsan");
                
this.Session.Add("sex""nan");
            }
        }

        
protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(
string.Format("姓名:{0},性别:{1}",Session["name"].ToString(),Session["sex"].ToString()));
        }
    }

数据库表中数据

     以上内容有不全面之处,其中的Custom模式的会话状态,我不经常用,如果想了解下,可查阅MSDN获得帮助。

posted @ 2009-06-17 15:32  网络渔夫  阅读(580)  评论(0编辑  收藏  举报