并按照异常所捕获得范围按照由小到大的顺序进行定义不要使用通用的System.Exception Private void

时间:2022-01-16 08:44:05


1.foreach VS for 语句

Foreach 要比for具有更好的执行效率

Foreach的平均花费时间只有for的30%.通过测试功效在for和foreach都可以使用的情况下,我们保举使用效率更高的foreach

此外,用for写入数据时间约莫是读取数据时间的10倍摆布.


2.制止使用ArrayList

ArrayList的性能低下任何东西添加到ArrayList中都要封箱为System.Object,从ArrayList中取出数据都要拆箱回实际的类型

泛型调集类的高性能,泛型调集是强类型的


3.使用HashTable字典调集

当存放少量数据时建议使用HashTable代替像StringDictionary,NameValueCollection, HybridCollection这样的字典调集


4.为字符串容器声明常量

为字符串容器声明常量,不要直接把字符串封装在双引号””中,制止字符串东西不停在内存中创建和释放.提高字符串东西的访谒效率.

//制止 MyObject obj = new MyObject(); obj.Status = “Active”; //保举 const string c = “Acive”; MyObject obj = new MyObject(); obj.Status = c;


5.使用String.Compare()字符串对照

不要使用UpperCase或LowerCase转换字符串的巨细写,再进行对照

使用String.Compare()可忽略字符串巨细写进行对照

String strTemp = “Active”; If(String.Compare(strTemp,”active”,true)==0){ Consolt.Write(“Equal”); }


6.使用StringBuilder字符串拼接

①.String类东西是不成变的(只读),对付String东西的从头赋值,素质是从头创建一个新的String东西并赋予新值给该东西.

②.System.Text.StringBuilder 维护一个长度即是Capacity的字符串(可以看作字符数组),当Capacity长度的字符串不敷以容纳功效字符串时,StringBuilder斥地新的长度为颠末上面的法则计算好的Capacity的内存区域,将原字符串复制到新的内存区域再进行操纵,原字符串区域交给GC回收。因此这里也涉及到内存的分配与回收,使用StringBuilder时最好估算一下所需容量,用这个容量初始化Capacity,提高性能。StringBuilder不能保证所有实例成员都是线程安适的,尽管在类型界说中插手了很多线程安适的控制,如果要确保其线程安适,须手工实现线程同步机制。


7.XPathDocument读取XML文件

如果只是读取XML东西的数据,那么用只读的XPathDocument取代XMLDocument,可以提高性能


8.制止在循环体里声明变量,应该在循环体外声明变量,在循环体内初始化变量

//制止 For(int i=0;i<10;i++){ SomeClass obj = new SomeClass(); //… } //保举 SomeClass obj = null; For(int i=0; i<10; i++){ obj = new SomeClass(); //… }


9.捕获指定的异常

捕获异常时,应使用具体的异常类进行捕获,并凭据异常所捕获得范畴凭据由小到大的挨次进行界说不要使用通用的System.Exception

Private void Find(object obj){ try{ Console.write(obj.ToString()); } catch(ArgumentNullException ane) { //… } catch(ArgumentException ae) { //… } catch(SystemException se) { //… } catch(Exception e) { //… } }

不要使用Exception控制流程,捕获异常对性能的损耗是众所周知的.因此最好能够制止异常的产生


10.使用using和try/finally清理资源

.NET 平台在内存打点方面供给了GC(Garbage Collection),卖力自动释放托管资源和内存回收的事情,但它无法对非托管资源进行释放,这时我们必需本身供给要领来释放东西内分配的非托管资源

使用非托管资源的类型必需实现IDisposable接口的Dispose要领来精确的释放资料

当使用带有Dispose要领的类型化资源时,应在使用完毕时挪用Dispose要领,及时释放失不用的资源.

使用using或try/finally能更好的保证Dispose要领被及时的挪用


11.制止滥用反射

反射是对照浪费性能的操纵,应制止滥用反射

影响性能的原因:

当使用反射来挪用类型或触发要领,访谒字段属性时,CLR需要做更多的事情:校验参数,查抄权限等.

当编写一个动态结构类型(晚绑定)的应用时,可采纳以下方法进行替换

通过类的担任关系

通过接口实现

通过委托实现


12.制止装箱操纵

使用值类型的ToString要领制止装箱操纵

原因:数字和字符串拼接的时候,因为数据类型差别,数字通过装箱操纵转换为引用类型后才华与字符串进行拼接.

//建议 int num=5; string str = “link me”+num.ToString();


13.HttpServerUtility.Transfer

给与 Server.Transfer 语法,在页面中使用该要领可制止不须要的客户端重定向(Response.Redirect)。

Int32.TryParse()

类型转化Int32.TryParse()优于Int32.Parse()优于Convert.ToInt32()

Convert.ToInt32 会把最终的解析事情代办代理给Int32.Parse

Int32.Parse 会把最终的解析事情代办代理给Number.ParseInt32

Int32.TryParse 会把最终的解析事情代办代理给Number.TryParseInt32