高效C#编码优化

1. Foreach比for语句具有更好的执行效率

2. 避免使用ArrayList

    因为任何对象添加到ArrayList都要封装为System.Object类型,从ArrayList取出数据时,要拆箱回实际的类型。建议使用自定的集合类型代替ArrayList。.NET 2.0提供了一个新的类型,叫泛型,这是一个强类型,使用泛型集合就可以避免装箱和拆箱的发生,提高性能。

3. 使用HashTable代替其他字典集合类型(如StringDictionary、NameValueCollection、HybridCollection),存放少量数据的时候可以使用HashTable。

4. 为字符串容器声明常量,不要直接把字符串封装在双引号(“”)里面。

    //避免

    MyObject obj = new MyObject();

    obj.Status = "ACTIVE";

    //推荐

    const string c = "ACTIVE";

    MyObject obj = new MyObject();

    obj.Status = c;

5. 不要用UpperCase、LowerCase转换字符串进行比较,用String.Compare代替,它可以忽略大小写进行比较。

6. 用StringBuilder代替使用字符串连接符“+”。

7. 如果只是从XML对象读取数据,那么用只读的XPathDocument代替XMLDocument,可以提高性能。

8. 避免在循环体里声明变量,应该在循环体外声明变量,在循环体里初始化。

9. 捕获指定的异常,不要使用通用的System.Exception。

10. 不要用Exception控制程序流程。

    捕获异常对性能的损耗是众所周知的。因此能够避免Exception就最好不用。例如:

    try {result = 100 / num;}

    catch(Exception e) {result = 0;}

    上面的代码会捕获除数为0的异常。此时完全可以用if语句来控制程序流程:

    if(num != 0) {result = 100 / num;}

    else {result = 0;}

11. 使用using和try/finally来做资源清理。

12. 避免滥用反射,反射是比较浪费性能的操作。

    对于打算编写一个动态构造类型(晚绑定)的应用程序,可以采取以下几种方式进行代替。

    通过类的继承关系:让该类型从一个编译时可知的基础类型派生出来,在运行时生成该类的一个实例,将对其的引用放到其基础类型的一个变量中,然后调用该基础累的虚方法。

    通过接口实现:在运行时,构建该类的一个实例,将对其的引用放到其接口类型的一个变量中,然后调用该接口定义的虚方法。

    通过委托实现:让该类型实现一个方法,其名称和原型都与一个在编译时就一致的委托相符。在运行时先构造该类型的实例,然后再用该方法的对象及名称构造出该委托的实例,接着通过委托调用你想要的方法。这个方法相对于前面两个方法所作的工作要多一些,效率更低。

13. 使用值类型的ToString方法避免装箱操作。

    //避免

    int i = 5;

    StringBuilder sb = new StringBuilder();

    sb.Append("abc" + i);

    //推荐

    int i = 5;

    StringBuilder sb = new StringBuilder();

    sb.Append("abc" + i.ToString());

posted @ 2013-09-29 16:37  wemzhugo  阅读(305)  评论(0)    收藏  举报