• .net开发性能优化总结,持续中...


    字符串操作相关

    1.  连接字符串使用StringBuilder类的,Append(),AppendForm()等方法:如
                  StringBuilder sb = new StringBuilder(); sb.AppendLine("/// <summary>");
                  sb.AppendLine("		/// 根据主键删除一条数据");
                  sb.AppendLine("		/// </summary>");
                  sb.AppendFormat("		/// <param name="{0}"></param>
      ", ToCamel(GetPKName()));
                  sb.Append("		/// <returns></returns>");

    2. 建议使用s+=i,不建议使用s=s+i
    3. 字符串比较。高效的做法是使用  Compare  方法,这个方法可以做大小写忽略的比较,并且不会创建新字符串。如
                  string userCode = txtVCode.Text.Trim();
                  if (Session["VCode"] != null)
                  {
                      string sysCode = Session["VCode"].ToString();
                      if (String.Compare(userCode, sysCode, true) == 0)
                      {
                          return true;
                      }
                      else
                      {
                          JScript.Alert(this, "验证码输入错误");
                      }
                  }
                  else
                  {
                      JScript.Alert(this, "验证码过期");
                  }
                  return false;

    4. 避免不必要的调用 ToUpper  或 ToLower  方法 ;String 是不变类,调用ToUpper 或ToLower 方法都会导致创建一个新的字符串;如果被频繁调用,将导致频繁创建字符串对象

    异常处理

    1. 关于异常处理的最重要原则就是:不要吃掉异常。这个问题与性能无关,但对于编写健壮和易于排错的程序非常重要。这个原则换一种说法,就是不要捕获那些你不能处理的异常(能不用tyr{}catch{}则不用,能预测和处理的异样早作处理)。 吃掉异常是极不好的习惯,因为你消除了解决问题的线索。一旦出现错误,定位问题将非常困难。除了这种完全吃掉异常的方式外,只将异常信息写入日志文件但并不做更多处理的做法也同样不妥。
    2. 避免不必要的重新抛出异常   如果是为了包装异常的目的(即加入更多信息后包装成新异常),那么是合理的。但是有不少代码,捕获异常没有做任何处理就再次抛出,这将无谓地增加一次捕获异常和抛出异常的消耗,对性能有伤害。
    3. 捕获指定的异常,不要使用通用的System.Exception,如
                  //避免 
                  try
                  {
                  }
                  catch (Exception ex)
                  {
                  }
                  // 推荐 
                  try
                  {
                  }
                  catch (NullReferenceException ex)
                  {
                  }
                  catch (ArgumentOutOfRangeException ex)
                  {
                  }
                  catch (InvalidCastException ex)
                  {
                  }

    Javascript方面相关

    1. 尽量将页面内的Jscript脚本移入到单独的JS文件中;将页面内的Jscript脚本放置在Page的最下面,有助于提高页面的响应速度。

    数据库操作方面相关

    1. 能用ExecuteScare的实现的数据库操作就不要用其它的Execute
    2. 如果需要一次导入或者导出大量数据,建议用DataReader,并且使用前打开数据库连接。

    其它暂时未分类

    1. 使用Server.Transfer()重定向请求优于Response.Redirect()。需要注意使用Server.Tranfer(),第一:地址栏的url不会变,但是打开的是另外一个页面;第二,它会跳过安全检查;第三,只适用于在同一Web应用内的页面间跳转,如果用户点击后退或者刷新可 能会发生意外情况。
    2. 避免循环创建对象;如果对象并不会随每次循环而改变状态,那么在循环中反复创建对象将带来性能损耗。高效的做法是将对象提到循环外面创建; 如果对象只在某些逻辑分支中才被用到,那么应只在该逻辑分支中创建对象:如
                  IList<BooksInfo> list;
                  if (dt.Rows.Count > 0)
                  {
                      list = new List<BooksInfo>();
                      for (int i = 0; i < dt.Rows.Count; i++)
                      {
                      }
                  }

    3. 避免在循环体里声明变量, 应该在循环体外声明变量,在循环体里初始化,如
                  // 避免 
                  for (int i = 0; i < 10; i++)
                  {
                      BooksInfo model = new BooksInfo();
                  }
                  // 推荐 
                  BooksInfo model = null;
                  for (int i = 0; i < 10; i++)
                  {
                      model = new BooksInfo();
                  }

    4. CLR 保证所有对象在访问前已初始化,其做法是将分配的内存清零。因此,不需要将变量重新初始化为0、false 或null 。需要注意的是:方法中的局部变量不是从堆而是从栈上分配,所以C#不会做清零工作。如果使用了未赋值的局部变量,编译期间即会报警。不要因为有这个印象而对所有类的成员变量也做赋值动作,两者的机理完全不同!
    5. 避免使用ArrayList。 因为任何对象添加到ArrayList 都要封箱为System.Object 类型,从ArrayList取出数据时,要拆箱回实际的类型。建议使用自定义的集合类型代替ArrayList。.net 2.0 提供了一个新的类型,叫泛型,这是一个强类型,使用泛型集合就可以避免了封箱和拆箱的发生,提高了性能。
    6. 预先计算collection 的length 。 如:
                  //将
                  for (int i = 0; i < collection.length; i++) { }
                  //替换成:
                  for (int i = 0, len = collection.length; i < len; i++) { }
                  //效果会更好,尤其是在大循环中。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    亚马逊EMR学习网站
    python实现redis三种cas事务操作
    【转】Jython简单入门
    【转】Android 收集已发布程序的崩溃信息
    【转】Android 避免APP启动闪黑屏(Theme和Style)
    【转】Android内存机制分析2——分析APP内存使用情况
    【转】Android内存机制分析1——了解Android堆和栈
    【转】JAVA Socket用法详解
    【转】JAVA 网络编程
    Android 无法Bind Service
  • 原文地址:https://www.cnblogs.com/ful1021/p/4804491.html
Copyright © 2020-2023  润新知