• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#代码优化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.Float并不比Double要快

2.右移和预计算优化是有效的

3.减少冗余计算

4.string ax=string.Empty;  注:不要使用: string ax="";  I don't konw why.But it's Microsoft's convention.

5.比较字符串时不要用.ToLower()/.ToUpper()
replace by Equals()     
Don't create a string never used later

6.Catch{}要捕获详细异常,不要再乱抛
catch the specific exception than "System.Exception" or rethrow the exception.
Catching generic exception types can hide run-time problems from the library user,
and can complicate debugging.

c#代码中影响性能的主要因素
    资源的浪费   
        -内存的浪费
        -对象的冗余
        -cpu的浪费
    拆箱,装箱
        -值类型与引用类型的转化
    算法
泛型
    c#的泛型支持:类,结构体,接口,委托以及方法成员
    c#的泛型可采用"基类,接口,构造器,值类型/引用类型"的约束方式来实现对类型参数的显示约束
    可以定义类型安全的数据结构
    因为防止了拆箱和装箱,所以可以显著提高性能
    可在支持泛型和扩展方法时,能够直接对类型使用扩展方法,而不用再反射调用了。
    值类型处理使用泛型比不使用泛型集合效率高很多
    引用类型处理用泛型和不使用泛型集合差不多
数据访问
    数据库连接最晚打开,最早关闭
    尽量使用ExecuteReader来读取数据
    DataTable比用DataSet性能好(除非要保存关系)
    合理使用连接池
    适当使用SQLCLR做存储过程
    不要忘记DataReader打开后是需要关闭的
    (cmd.ExecuteReader(ConnectionBehavior.CloseConnection); or if (sdr.IsClosed) sdr.Close())
    非托管内容需要显示的去关闭
循环
    尽量减少循环体中设置/初始化变量
    避免在循环中修改被便利对象的子元素
    在多线程场景中,循环执行时适当使用
    sleep会提高系统整体性能
    避免使用递归调用和嵌套循环
    推荐尽量使用foreach替代for
异常处理
    捕获和抛出异常都是消耗比较大的操作,尽量减少try的次数,避免使用异常来控制处理逻辑
    避免引发不必要的异常
    捕获制订的异常,尽量避免使用异常的基类System.Exception
    处理异常时,在finally中释放占用的资源(连接,文件流等)
位运算
    不要忘记位运算这个性能极高的东东
其它
    减少使用输出参数
    避免使用ArrayList,尽量使用泛型列表
    部署之前禁用调试模式
    使用常量避免创建对象(如string.empty替代"")
    避免使用空的析构函数
    减少类型转化
    如果数据结构符合键值对的形式,建议使用泛型字典(非泛型情况下用hashtable)
    提升i/o速度,并减少i/o数量
    若对反射机制不熟悉,应在关键模块代码中避免使用它;
    推荐学习使用老赵的FastReflectionLib

1.Float并不比Double要快

2.右移和预计算优化是有效的

3.减少冗余计算

4.string ax=string.Empty;  注:不要使用: string ax="";  I don't konw why.But it's Microsoft's convention.

5.比较字符串时不要用.ToLower()/.ToUpper()
replace by Equals()     
Don't create a string never used later

6.Catch{}要捕获详细异常,不要再乱抛
catch the specific exception than "System.Exception" or rethrow the exception.
Catching generic exception types can hide run-time problems from the library user,
and can complicate debugging.

c#代码中影响性能的主要因素
    资源的浪费   
        -内存的浪费
        -对象的冗余
        -cpu的浪费
    拆箱,装箱
        -值类型与引用类型的转化
    算法
泛型
    c#的泛型支持:类,结构体,接口,委托以及方法成员
    c#的泛型可采用"基类,接口,构造器,值类型/引用类型"的约束方式来实现对类型参数的显示约束
    可以定义类型安全的数据结构
    因为防止了拆箱和装箱,所以可以显著提高性能
    可在支持泛型和扩展方法时,能够直接对类型使用扩展方法,而不用再反射调用了。
    值类型处理使用泛型比不使用泛型集合效率高很多
    引用类型处理用泛型和不使用泛型集合差不多
数据访问
    数据库连接最晚打开,最早关闭
    尽量使用ExecuteReader来读取数据
    DataTable比用DataSet性能好(除非要保存关系)
    合理使用连接池
    适当使用SQLCLR做存储过程
    不要忘记DataReader打开后是需要关闭的
    (cmd.ExecuteReader(ConnectionBehavior.CloseConnection); or if (sdr.IsClosed) sdr.Close())
    非托管内容需要显示的去关闭
循环
    尽量减少循环体中设置/初始化变量
    避免在循环中修改被便利对象的子元素
    在多线程场景中,循环执行时适当使用
    sleep会提高系统整体性能
    避免使用递归调用和嵌套循环
    推荐尽量使用foreach替代for
异常处理
    捕获和抛出异常都是消耗比较大的操作,尽量减少try的次数,避免使用异常来控制处理逻辑
    避免引发不必要的异常
    捕获制订的异常,尽量避免使用异常的基类System.Exception
    处理异常时,在finally中释放占用的资源(连接,文件流等)
位运算
    不要忘记位运算这个性能极高的东东
其它
    减少使用输出参数
    避免使用ArrayList,尽量使用泛型列表
    部署之前禁用调试模式
    使用常量避免创建对象(如string.empty替代"")
    避免使用空的析构函数
    减少类型转化
    如果数据结构符合键值对的形式,建议使用泛型字典(非泛型情况下用hashtable)
    提升i/o速度,并减少i/o数量
    若对反射机制不熟悉,应在关键模块代码中避免使用它;
    推荐学习使用老赵的FastReflectionLib


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap