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
|
请发表评论