一、C#代码中影响性能的主要因素
• 资源的浪费
– 内存的浪费
– 对象的冗余 (创建一个已有对象的新对象)
– CPU的浪费
• 拆箱、装箱
– 值类型与引用类型的转化
• 算法
二、泛型
• C#的泛型支持:类、结构体、接口、委托以及方法成员
• C#的泛型可采用“基类, 接口, 构造器, 值类型/引用类型”的约束方式来实现对类型参数的“显式约束”
• 可以定义类型安全的数据结构
• 因为防止了拆箱和装箱,所以可以显著提高性能
• 可在支持泛型和扩展方法时,能够直接对类型使用扩展方法,而不用再反射调用了。
三、.NET框架集合类和接口的泛型版本

四、数据访问
• 数据库链接最晚打开,最早关闭
• 尽量使用ExcuteReader来读取数据
• DataTable比用DataSet性能好(除非要保存关系)
• 合理使用连接池
• 适当使用SQLCLR做存储过程等
• 不要忘记 DataReader打开后是需要关闭的
五、循环
• 尽量减少循环体中设置/初始化变量
• 避免在循环中修改被遍历对象的子元素
• 在多线程场景中,循环执行时适当使用sleep会提高系统整体性能
• 避免使用递归调用和嵌套循环
• 推荐尽量使用foreach替代for
六、位运算
• 不要忘记位运算这个性能极高的东东哦:D
• <<、>>、&、|、^、~、<<=、>>=、&=、^=、|=
七、异常处理
• 捕获和抛出异常都是消耗比较大的操作,尽量减少try的次数,避免使用异常来控制处理逻辑
• 避免引发不必要的异常
• 捕获制定的异常,尽量避免使用异常的基类System.Exception
• 处理异常时,在finally中释放占用的资源(连接、文件流等)
八、其他
• 减少使用输出参数
• 避免使用ArrayList,尽量使用泛型列表
• 部署之前禁用调试模式
• 使用常量避免创建对象(如string.empty替代””)
• 避免使用空的析构函数
• 减少类型转化
• 如果数据结构符合键值对的形式,建议使用泛型字典(非泛型情况下用hashtable)
• 提升I/O的速度,并减少I/O数量
• 若对反射机制不熟悉,应在关键模块代码中避免使用它;推荐学习使用老赵的FastReflectionLib

浙公网安备 33010602011771号