高效C#编码优化原则

本文汇总了高效C#编码常见的优化原则,对于进行C#程序设计来说有很大的参考借鉴作用。具体列出如下:


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

相信本文所述的C#优化原则能够对大家的C#程序设计起到一定的借鉴作用。

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  高效C#编码优化原则

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23671.html

相关内容

VS2013创建Windows服务与调试服务的图文方法

C#连接数据库的方法

C#实现图形区域组合操作的方法

C#实现最完整的文件和目录操作类实例


C#语法相比其它语言比较独特的地方(二)

C#使用timer实现的简单闹钟程序

C#基础教程之IComparable用法,实现List.sort()排序

C#中string用法实例详解

时间: 2024-11-09 22:45:38

高效C#编码优化原则的相关文章

高效C#编码优化

1.foreach VS for 语句 Foreach 要比for具有更好的执行效率Foreach的平均花费时间只有for的30%.通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach另外,用for写入数据时间大约是读取数据时间的10倍左右. 2.避免使用ArrayList ArrayList的性能低下任何对象添加到ArrayList中都要封箱为System.Object,从ArrayList中取出数据都要拆箱回实际的类型 泛型集合类的高性能,泛型集合是强

Android最佳性能实践(三)——高性能编码优化

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/42318689 在前两篇文章当中,我们主要学习了Android内存方面的相关知识,包括如何合理地使用内存,以及当发生内存泄露时如何定位出问题的原因.那么关于内存的知识就讨论到这里,今天开始我们将学习一些性能编码优化的技巧. 这里先事先提醒大家一句,本篇文章中讨论的编码优化技巧都是属于一些"微优化",也就是说即使我们都按照本篇文章的技巧来优化代码,在性能方面也是看不出有什么

【翻译】Ext JS——高效的编码风格指南

原文:ExtJS - Efficient coding style guide 作者:Raja 切勿使用"new"关键字:在Ext JS中,使用"new"关键字来创建一个组件或类的实例是一种错误的做法,因为这没有遵循组件的生命周期.应该使用Ext.create方法来创建对象,例如: 错误: var obj = new Ext.panel.Panel(); 正确: var obj = Ext.create('Ext.panel.Panel'); 初始化直接量:不要直接

MySQL 索引优化原则

一.索引优化原则 1.最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整. 2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优

优秀编码原来也可以这么容易--编码四原则

文/罗恩良 优秀编码很难.即使在有很多编码书籍.编程规范的情况下,绝大部分项目输出的代码依旧质量不高. 为什么会出现这种情况?我觉得主要是因为不分轻重.面面俱到,"面面俱到"必然导致"面面不到".数十本编码必读的书籍.好几千页.22 种坏味道.72 种重构方法,让绝大多部程序员不堪重负,根本记不住,更不说有效地应用了. 那有没有简单有效的方法快速提升团队的编码水平,人人都能写高质量优秀代码? 本篇文章总结提取出优秀编码最重要的四个原则,不用面面俱到,只是简单地应用了

js优化原则

首先,与其他语言不同,JS的效率很大程度是取决于JS engine的效率.除了引擎实现的优劣外,引擎自己也会为一些特殊的代码模式采取一些优化的策略.例如FF.Opera和Safari的JS引擎,都对字符串的拼接运算(+)做了特别优化.显然,要获得最大效率,就必须要了解引擎的脾气,尽量迎合引擎的口味.所以对于不同的引擎,所作的优化极有可能是背道而驰的. 而如果做跨浏览器的web编程,则最大的问题是在于IE6(JScript 5.6)!因为在不打hotfix的情况下,JScript引擎的垃圾回收的b

Flex内存泄露解决方法和内存释放优化原则

本文向大家简单介绍一下Flex内存泄露问题,主要包括Flex内存释放优化原则和Flex内存泄露解决方法两大部分内容,希望你会感兴趣. 作者:vipoyb来源:csdn.net|2010-07-29 14:08   你对Flex内存泄露的概念是否了解,这里和大家分享一下Flex内存释放优化原则和Flex内存泄露解决方法,希望本文的介绍能让你有所收获. Flex内存释放优化原则 1.被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉: 2.父对象内部的子对象被外部其他对象引用了,

hbase表设计优化原则 ***** 生产环境中使用小结

2019/2/28 星期四 hbase表设计优化原则 https://www.cnblogs.com/qingyunzong/p/8696962.html表设计1.列簇设计 追求的原则是:在合理范围内能尽量少的减少列簇就尽量减少列簇. 最优设计是:将所有相关性很强的 key-value 都放在同一个列簇下,这样既能做到查询效率 最高,也能保持尽可能少的访问不同的磁盘文件. 以用户信息为例,可以将必须的基本信息存放在一个列族,而一些附加的额外信息可以放在 另一列族.2.RowKey 设计 HBas

(转)SQL优化原则

一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一.系统优化中一个很重要的方面就是SQL语句的优化.对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性. 在多数情况下,Oracle使用索