必须知道的.net(性能条款)

  1. 以dispose的模式来代替finalize方式:非托管资源的清理主要有终止化操作和Dispose模式两种,其中Finalize方式存在执行时间不确定,运行顺序不确定,同时对垃圾回收的性能有极大的损伤。
  2. 选择合适的垃圾收集器:工作站GC和服务器GC:工作站GC主要应用于单处理器系统,而服务器收集器专为多处理器设计,默认情况下为工作站收集器。
  3. 适当的情况下对对象实现弱引用:弱引用是对象引用的一种中间态,实现了对象既可以通过GC回收内存,又可以被应用程序访问的机制。胖对象需要大量的内存来创建,弱引用机制保证了胖对象的内存不足时GC可以回收,而不影响内存使用,在没有被GC回收前又可以再次引用该对象,从而达到空间与时间的双重节约。eg:
  4. 尽可能以using来执行资源清理
  5. 推荐使用泛型集合来代替非泛型集合:以ArrayList为例:
  6. 始化时最好为集合对象指定大小:集合动态增加的过程是一个内存重新分配和集合元素复制的过程,对性能有一定影响。
  7. 特定类型的Array性能优于ArrayList:ArrayList只接受Object类型的元素,向ArrayList添加其他类型元素会发生装箱和拆箱,因此在性能上优于Array
  8. 字符串驻留机制,是CLR为String类型实现的特殊设计
  9. 合理使用System.String和System.Text.StringBuilder:在简单的字符串操作中使用String,在复杂的字符串操作中使用StringBuilder。
  10. 尽量在子类中重写ToString()
  11. 其他推荐的字符串操作:字符串比较用String.Compare(str1,str2);字符串判断是否为空用Str.Length==0判断
  12. for和foreach的选择:推荐选择Foreach来处理可枚举集合的循环结构
  13. 以多线程处理应对系统设计:线程池
  14. 尽可能少的抛出异常,禁止将异常处理放在循环中:eg:Console.WriteLine(obj==null?String.Empty:obj.ToString());
  15. 捕获异常时,尽量指定具体的异常筛选器
  16. struct和class性能比较:以struct来实现对轻量级数据的封装是较好的选择。因为struct是值类型,数据分配在线程的堆栈上,所以具有较好的性能表现
  17. 以is、as模式进行类型兼容性检查:以is实现类型判断。以as实现安全的类型转换
  18. const和static readonly的权衡:推荐以static readonly来代替const
  19. 尽量避免不当的装箱和拆箱
  20. 尽量使用一维零基数组
  21. 以FxCop工具检查代码的规范(性能等)

 

                     

 

posted @ 2013-06-24 10:22  luyujie_may  阅读(210)  评论(0编辑  收藏  举报