必须知道的.net(性能条款)
- 以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工具检查代码的规范(性能等)
必须知道的.net(性能条款)的更多相关文章
- 你必须知道的10个提高Canvas性能技巧
你还在抱怨自己写的canvas demo徘徊在10帧以下吗?你还在烦恼打开自己写的应用就听见CUP风扇转吗?你正在写一个javascript Canvas库吗?那么下面九点就是你必须知道的! 一.预渲 ...
- (转)【推荐】初级.NET程序员,你必须知道的EF知识和经验
转自:http://www.cnblogs.com/zhaopei/p/5721789.html [推荐]初级.NET程序员,你必须知道的EF知识和经验 阅读目录 [本文已下咒.先顶后看,会涨 ...
- [你必须知道的.NET]第三十一回,深入.NET 4.0之,从“新”展望
发布日期:2009.05.22 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. /// <summary> /// 本文开始,将以& ...
- [你必须知道的.NET]第三十回:.NET十年(下)
发布日期:2009.05.11 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. /// <summary> /// 本文部分内容,已 ...
- 必须知道的ADO.NET 数据库连接池
http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html 题外话 通过前几章的学习,不知道大家对ADO.NET有一定的了解了没 ...
- 深入理解.net - 4.你必须知道的String
为什么要单独写string,主要是它太常用了,同时又太特殊了,特殊到CLR对它的处理都和其它对象不一样.简直可以称为VIP用户啊.本文并不是一篇介绍如何使用string的文章,而是旨在阐述string ...
- [你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器
发布日期:2008.11.2 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 今天Artech兄在<关于Type Init ...
- Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor
Webservice WCF WebApi 注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
随机推荐
- 加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 1 Estimating unknown parameters
Stat2.3x Inference(统计推断)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...
- POJ 2533 Longest Ordered Subsequence(最长上升子序列(NlogN)
传送门 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subseque ...
- 【Alpha版本】冲刺-Day2
队伍:606notconnected 会议时间:11月10日 会议总结 张斯巍(433) 今天安排:把昨天没完成的做好,主界面图标的修改,侧边栏背景设计 完成度:85% 明天计划:个人信息界面设计.优 ...
- Javascript 与正则表达式
一.正则表达式(regular expression简称res) 二.元字符及其在正则表达式上下文中的行为 三.正则表达式的常用方法 四.与正则表达式有关的字符串对象的方法 五.常用的正则表达式的操作 ...
- sql 编写横竖表转换
将横表转为竖表,基本思想是: 1)将横表的多条数据,"压"成一条.相当于将这么多条分组,每组"压"成一条数据.利用group by 2) 再对竖表中的列,由特定 ...
- JAVA Socket超时浅析
JAVA Socket超时浅析 套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字&q ...
- css006 文本格式化
css006 文本格式化 文本格式化:字体(font-family).颜色(color).字号(font-size). 行距(line-height).粗体(font-weight).斜体(font- ...
- HTML 通知公告练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Error: [$rootScope:inprog] $digest already in progress
我在 做一个 服务器分配成功以后需要更新 整个页面,我的思路是 更新成功以后,就手动的 触发一下 搜索按钮,但是在触发后,虽然成功刷新了页面,但是出现了一个 错误提示, Error: [$rootSc ...
- 其他系统与ecshop的会员整合
步骤一:整合两个的会员数据 用软件Navicat 的 "导入向导"功能,导入你的原数据类型(sql,mdb,db)我的是mdb类型.下一步选择你原有的会员字段“user”.再进行下 ...