高效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());
浙公网安备 33010602011771号