拥有良好的编码风格,不仅写出来的代码条理清晰,而且也会增强程序的健壮性,同时,遵守一些编码的规范,会使得程序的性能有很大的提高。如下是一些可以提高程序性能的编码规范,供大家参考。
(1) 避免在循环体内创建对象:有些对象并不是在循环体内每次都改变状态,所以在循环体内创建对象会导致应创建对象和回收对象而导致的性能损失,应该把创建对象代码提到循环体的外部。
不规范的代码:
1 for (int i = 0; i < length; i++)
2 {
3 Person _person = new Person();
4 ......
5 }
6
规范的代码:
1 Person _person = new Person();
2 for (int i = 0; i < length; i++)
3 {
4 ......
5 }
6
(2) 避免装箱和拆箱:把值类型对象转换为引用类型时会导致装箱操作,把引用类型转换回值类型的时候又导致拆箱的操作。一种典型的使用是ArrayList,ArrayList的item为Object类型,如果实际应用过程中把值类型,例如int类型,作为ArayList的元素进行操作就会导致如上所述的性能问题。
不规范的代码:
1 ArrayList list = new ArrayList();
2 for (int i = 0; i < 100; i++)
3 {
4 list.Add(i);
5 }
6 ......
7 for (int j = 0; j < list.Count; j++)
8 {
9 int value = (int)list[j];
10 ......
11 }
规范的代码
1 List<int> list = new List<int>();
2 for (int i = 0; i < 100; i++)
3 {
4 list.Add(i);
5 }
6 ......
7 for (int j = 0; j < list.Count; j++)
8 {
9 int value = list[j];
10 ......
11 }
12
(3) 多个字符串连接(连接操作大于5)时候,应使用StringBuilder,使用+操作符会导致创建新的字符串。
不规范的代码:
1 string str = "string";
2 for (int i = 0; i < 100; i++)
3 {
4 str += i.ToString();
5 }
6
规范的代码:
1 StringBuilder strbd = new StringBuilder("string");
2 for (int i = 0; i < 100; i++)
3 {
4 strbd.Append(i);
5 }
6 string str = strbd.ToString();
7
(4) is 和as关键字:一种典型的应用场景是判断某个对象是否为某种类型,如果是,则显式转换为这种类型。其实这样的操作导致CLR两次核实对象的类型,对性能造成了一定的影响。
不规范的代码:
1 if (ds is DataSet)
2 {
3 DataSet _ds = (DataSet)ds;
4 ......
5 }
6
规范的代码:
1 DataSet _ds = ds as DataSet;
2 if (_ds != null)
3 {
4 ......
5 }
6
规范的代码不仅易于阅读和维护,有时候还可以增强程序的性能,以上一些例子就是不规范的代码导致的性能问题,这些性能问题有的时候并不是十分突出,但是我们写代码要时刻有这样的意识。如果性能问题点太多,对整体程序的影响也是非常大的。