Web.config详解+asp.net优化方法

来源:中国IT实验室 作者:佚名 2008-05-14 出处:pcdog.com

.net  iis  sql server  sql server存储过程  安全  
上一页 1 2 
    (四).避免使用DataGrid
        大家都知道DataGrid功能强大。但是功能强大的同时,增加了性能上的开销。一般用其它控件: DataList [Page]
        或Repeater控件能实现的,尽量不用DataGrid.
    (五).字符串操作
        1.避免装箱操作. 装箱操作运行效率比较低.
          例如运行两个代码段:
            string test=\"\";
             for(for int i=0;i<10000;i++)
             {
                 test = test + i;
             }
             和
                      string test=\"\";
             for(for int i=0;i<10000;i++)
             {
                 test = test + i.ToString();
             }
           下面的代码段显然效率要高.因为i是整型的,系统要先把i进行装箱转换为string型的,再进行连接. 需要时间
           读者可以Copy到自己机器上测试一下.
         2.使用StringBulider类
           在进行字符串连接时: string str = str1 + str2 + ....;

           一般超过三项连接,最好用StringBuilder来代替string类. StringBuilder可以避免重新创建string 对象造成
           的性能损失.
           一般用于组装sql语句时用到: StringBulider.
           读者可以到自己机器上测试一下.
    3.尽量少用:
            try
            {}
            catch
            {}
            finally
            {}
            语句.此语句执行效率比较低.
    (六).ADO.Net使用方面优化 
         1.数据库连接打开和关闭。 在需要连接时打开,当访问完数据库要立刻关闭连接.
           举例说明,还是看两个代码段:
          I.
               DataSet ds = new DataSet();
               SqlConnection MyConnection = new SqlConnection(\"server=localhost; uid=sa; pwd=; database=NorthWind\");
               SqlCommand myCommand = new SqlCommand(strSql,MyConnection);
               SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
            MyConnection.Open();      //打开连接
            for(int i=0;i<1000;i++)   //for循环模拟取得数据前的商业逻辑操作
             {
                Thread.Sleep(1000);
           }
           myAdapter.Fill(ds);
            for(int i=0;i<1000;i++)   //for循环模拟取得数据后的商业逻辑操作
            {
               Thread.Sleep(1000);
            }
            MyConnection.Close();     //关闭连接
            II.
               DataSet ds = new DataSet();
               SqlConnection MyConnection = new SqlConnection(\"server=localhost; uid=sa; pwd=; database=NorthWind\");
               SqlCommand myCommand = new SqlCommand(strSql,MyConnection);
               SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);         [Page]
             for(int i=0;i<1000;i++)   //for循环模拟取得数据前的商业逻辑操作
             {
                Thread.Sleep(1000);
           }
           MyConnection.Open();      //打开连接
               myAdapter.Fill(ds);
              MyConnection.Close();     //关闭连接
            for(int i=0;i<1000;i++)   ////for循环模拟取得数据后的商业逻辑操作
            {
               Thread.Sleep(1000);
            }
             显示II代码比I代码好的多,I中早早占着连接不放,如果用户很多的话,容易出现连接池满情况。严重时出现死机现象.
           2.数据库查询
              I. 直接生成sql语句。 sql server每次都要对其进行编译,在性能方面不会有很大的提高。另外也不够安全。容易被攻击.
              II. 使用带参数的sql命令。这种方式sql server只对其编译一次,对于不同的参数可以重复使用编译后的命令。提高了性能.
              III.使用sql server存储过程. 编译一次. 具有独立性,便于修改和维护. 一次能完成用语句发送多次的功能.减少了网络的

              流量。 并不一定存储过程一定比语句效率要高,如果商业逻辑很复杂的话,有时候用语句比存储过程效率要高.
    (六).缓存优化
         缓存分为两种:页面缓存和API缓存.
        1.使用页面缓存和片段缓存
            <%@ OutputCache Duration=\"5\" VaryByParam=\"None\"%>
            <%@ OutputCache Duration=60 VaryByParam=”TextBox1,TextBox2” %>
          说明: Duration是设置Cache的过期时间;
              VarByParam是设置是否根据参数而变化,None时所有参数使用同一Cache,  [Page]
              设置TextBox1时则根据TextBox1的不同值分别缓存;当有多个参数时则要组合缓存;
        2.API缓存。用于在应用程序中使用
           I. 一个Cache使用的例子:
               http://blog.csdn.net/chengking/archive/2005/10/03/494545.aspx
           II.使用时注意Page.Cache和HttpContext.Current.Cache区别:
              它们指的同一个对象,在Page里,用Page.Cache,如果在global.asax或自己的类里用:HttpContext.Current.Cache 在有些事件中,由于其没有HttpContext,就用HttpRuntime.Cache.


更多内容请看PCdog.com--.NET基础介绍  .NET实用开发  ASP.NET经验技巧篇专题
上一页 1 2 
上一篇:Asp.NET大文件上传开发总结(一)
下一篇:ASP.NET 之Form安全认证