- 以dispose的模式来代替finalize方式:非托管资源的清理主要有终止化操作和Dispose模式两种,其中Finalize方式存在执行时间不确定,运行顺序不确定,同时对垃圾回收的性能有极大的损伤。
- 选择合适的垃圾收集器:工作站GC和服务器GC:工作站GC主要应用于单处理器系统,而服务器收集器专为多处理器设计,默认情况下为工作站收集器。
- 适当的情况下对对象实现弱引用:弱引用是对象引用的一种中间态,实现了对象既可以通过GC回收内存,又可以被应用程序访问的机制。胖对象需要大量的内存来创建,弱引用机制保证了胖对象的内存不足时GC可以回收,而不影响内存使用,在没有被GC回收前又可以再次引用该对象,从而达到空间与时间的双重节约。eg:
- 尽可能以using来执行资源清理
- 推荐使用泛型集合来代替非泛型集合:以ArrayList为例:
- 初始化时最好为集合对象指定大小:集合动态增加的过程是一个内存重新分配和集合元素复制的过程,对性能有一定影响。
- 特定类型的Array性能优于ArrayList:ArrayList只接受Object类型的元素,向ArrayList添加其他类型元素会发生装箱和拆箱,因此在性能上优于Array
- 字符串驻留机制,是CLR为String类型实现的特殊设计
- 合理使用System.String和System.Text.StringBuilder:在简单的字符串操作中使用String,在复杂的字符串操作中使用StringBuilder。
- 尽量在子类中重写ToString()
- 其他推荐的字符串操作:字符串比较用String.Compare(str1,str2);字符串判断是否为空用Str.Length==0判断
- for和foreach的选择:推荐选择Foreach来处理可枚举集合的循环结构
- 以多线程处理应对系统设计:线程池
- 尽可能少的抛出异常,禁止将异常处理放在循环中:eg:Console.WriteLine(obj==null?String.Empty:obj.ToString());
- 捕获异常时,尽量指定具体的异常筛选器
- struct和class性能比较:以struct来实现对轻量级数据的封装是较好的选择。因为struct是值类型,数据分配在线程的堆栈上,所以具有较好的性能表现
- 以is、as模式进行类型兼容性检查:以is实现类型判断。以as实现安全的类型转换
- const和static readonly的权衡:推荐以static readonly来代替const
- 尽量避免不当的装箱和拆箱
- 尽量使用一维零基数组
- 以FxCop工具检查代码的规范(性能等)
相关文章
- 05-06大数据可视化——5个必须知道的工具
- 05-06Vue 开发必须知道的 36 个技巧【近1W字】
- 05-06关于网络优化你必须要知道的重点,已拿offer附真题解析
- 05-0619个必须知道的Visual Studio快捷键(转)
- 05-06(转)19个必须知道的Visual Studio快捷键
- 05-06CodeGo.net>如何知道输入是否仅在罗斯林的ScripEngine中部分完成
- 05-06【粉丝福利】月薪20k以上的软件测试工程师,必须要知道的知识点总结
- 05-06你必须知道的.net读书笔记之第二回深入浅出关键字---对抽象编程:接口和抽象类
- 05-06学建模这几种常用的3d建模方式你必须知道!
- 05-06好用的前端开发工具:这四款你必须知道