1、使用StringBuilder代替使用string 连接符 "+"

说明:String类对象是不可变的(只读),一旦创建该对象,就不能修改该对象的值。

对象String对象的重新赋值,本质上是重新创建了一个String对象并将新的值赋值给该对象。

如果字符串存在较多次的拼接时候,最后使用StringBuilder类,需要引用命名空间 System.Text。

该类不是创建新的对象,而是通过Append、Insert、Remove等方法对字符串直接进行操作,最后通过

ToString方法返回操作结果。从而避免创建大量对象,造成资源浪费、性能降低。

例如:

//不要这样写

String str="bei";

str+="jing";

str+="huan";

str+="ying";

str+="ni";

//推荐这样写

StringBuilder str=new StringBuilder();

str.Append("bei");

str.Append("jing");

str.Append("huan");

str.Append("ying");

str.Append("ni");

2、用foreach 代替 for 循环

如果是可以使用foreach的时候,尽量用foreach,而不是 for。前者的效率比后者要高很多。

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

4、避免使用ArrayList

因为ArrayList使用的时候存在装箱、拆箱会造成性能的损失,可以用泛型来代替。

5、如果是字符进行比较的时候可以采用String.Compare,它会忽略大小写进行比较,而不要使用UpperCase、Lowercase转换后进行比较。

6、如果只是从xml对象中读取数据,可以用只读的XPathDocument代替XMLDocument,可以提高性能。

7、C#捕获异常的时候,不要使用通用的System.Exception。可以根据程序逻辑考虑可能出现的异常进行控制。

8、要避免在循环体内声明变量,如果可以的化,最好放在循环体外声明,在循环体内初始化。

9、采用using和try/finaly来做资源清理

10、不要使用异常(Exception)来控制程序的流程

因为捕获异常对性能的损耗很大,最好不要用异常去控制程序的流程。

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

因为值类型到引用类型会造成性能的损耗,所以使用值类型的ToString方法可以避免装箱造成的性能损耗。

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

当使用反射来调用类型或者触发方法,或者访问一个字段或者属性是,CLR需要做很多工作:校验参数、检查权限、

所以非常耗时,因此这样的情况下要尽量避免反射的使用。

欢迎关注我的公众号,定期推送文章:原文