字符串操作相关
- 连接字符串使用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>");
- 建议使用s+=i,不建议使用s=s+i
- 字符串比较。高效的做法是使用 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;
- 避免不必要的调用 ToUpper 或 ToLower 方法 ;String 是不变类,调用ToUpper 或ToLower 方法都会导致创建一个新的字符串;如果被频繁调用,将导致频繁创建字符串对象
异常处理
- 关于异常处理的最重要原则就是:不要吃掉异常。这个问题与性能无关,但对于编写健壮和易于排错的程序非常重要。这个原则换一种说法,就是不要捕获那些你不能处理的异常(能不用tyr{}catch{}则不用,能预测和处理的异样早作处理)。 吃掉异常是极不好的习惯,因为你消除了解决问题的线索。一旦出现错误,定位问题将非常困难。除了这种完全吃掉异常的方式外,只将异常信息写入日志文件但并不做更多处理的做法也同样不妥。
- 避免不必要的重新抛出异常 如果是为了包装异常的目的(即加入更多信息后包装成新异常),那么是合理的。但是有不少代码,捕获异常没有做任何处理就再次抛出,这将无谓地增加一次捕获异常和抛出异常的消耗,对性能有伤害。
- 捕获指定的异常,不要使用通用的System.Exception,如
//避免 try { } catch (Exception ex) { } // 推荐 try { } catch (NullReferenceException ex) { } catch (ArgumentOutOfRangeException ex) { } catch (InvalidCastException ex) { }
Javascript方面相关
- 尽量将页面内的Jscript脚本移入到单独的JS文件中;将页面内的Jscript脚本放置在Page的最下面,有助于提高页面的响应速度。
数据库操作方面相关
- 能用ExecuteScare的实现的数据库操作就不要用其它的Execute
- 如果需要一次导入或者导出大量数据,建议用DataReader,并且使用前打开数据库连接。
其它暂时未分类
- 使用Server.Transfer()重定向请求优于Response.Redirect()。需要注意使用Server.Tranfer(),第一:地址栏的url不会变,但是打开的是另外一个页面;第二,它会跳过安全检查;第三,只适用于在同一Web应用内的页面间跳转,如果用户点击后退或者刷新可 能会发生意外情况。
- 避免循环创建对象;如果对象并不会随每次循环而改变状态,那么在循环中反复创建对象将带来性能损耗。高效的做法是将对象提到循环外面创建; 如果对象只在某些逻辑分支中才被用到,那么应只在该逻辑分支中创建对象:如
IList<BooksInfo> list; if (dt.Rows.Count > 0) { list = new List<BooksInfo>(); for (int i = 0; i < dt.Rows.Count; i++) { } }
- 避免在循环体里声明变量, 应该在循环体外声明变量,在循环体里初始化,如
// 避免 for (int i = 0; i < 10; i++) { BooksInfo model = new BooksInfo(); } // 推荐 BooksInfo model = null; for (int i = 0; i < 10; i++) { model = new BooksInfo(); }
- CLR 保证所有对象在访问前已初始化,其做法是将分配的内存清零。因此,不需要将变量重新初始化为0、false 或null 。需要注意的是:方法中的局部变量不是从堆而是从栈上分配,所以C#不会做清零工作。如果使用了未赋值的局部变量,编译期间即会报警。不要因为有这个印象而对所有类的成员变量也做赋值动作,两者的机理完全不同!
- 避免使用ArrayList。 因为任何对象添加到ArrayList 都要封箱为System.Object 类型,从ArrayList取出数据时,要拆箱回实际的类型。建议使用自定义的集合类型代替ArrayList。.net 2.0 提供了一个新的类型,叫泛型,这是一个强类型,使用泛型集合就可以避免了封箱和拆箱的发生,提高了性能。
- 预先计算collection 的length 。 如:
//将 for (int i = 0; i < collection.length; i++) { } //替换成: for (int i = 0, len = collection.length; i < len; i++) { } //效果会更好,尤其是在大循环中。
版权声明:本文为博主原创文章,未经博主允许不得转载。