必须知道的.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/)的最新技术心 ...
随机推荐
- PhpStorm 默认快捷键
ctrl+j 插入活动代码提示ctrl+alt+t 当前位置插入环绕代码alt+insert 生成代码菜单Shift + Enter 新一行ctrl+ ...
- Windows系统:桌面,开始菜单和工具栏都不见了
win7桌面,开始菜单和工具栏都不见了 ctrl+alt+del 打开任务管理器 然后文件-运行 --- 输入框里输入 explorer.exe 其实就是打开系统文件夹下的(大约是‘windows ...
- 使用dom4j解析XML文档
dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...
- UVA12034Race(DP)
题目链接 题意:A.B两人赛马,最终名次有三种可能:并列第一:A第一,B第二:B第一,A第二.输入n,求 n 人赛马时最终名次的可能,结果对10056取余 分析:对于 i 匹马来说,有 i 中可能,设 ...
- BZOJ3160: 万径人踪灭
设a[i]=bool(s[i]=='a'),b[i]=bool(s[i]=='b'),考虑a和a.b和b的卷积,由于卷积是对称的,就可以统计出不连续回文子串个数了.可能说得比较简略.再用manache ...
- MyEclipse快捷键大全(绝对全)
存盘 Ctrl+s(肯定知道) 注释代码 Ctrl+/ 取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了) 代码辅助 Alt+/ 快速修复 Ctrl+1 代码格式化 Ctrl+Shi ...
- 遍历jsonobject
遍历jsonobject 1 entrySet.iterator生成迭代器 2 从迭代器获取Map.Entry的单元对象 3 获取key和value Map<String,JSONObject& ...
- phpcms响应式布局导航条
- 完整的ajax请求投票点赞功能的实现【数据库表一(票数)表二(ip限制重复投票)】
前端php页面 <?php if(isset($_GET['id'])){ $id=$_GET['id']; } include('data/conn.php'); $sqls="se ...
- 4个mysql客户端工具的比较
mysql是我以前学习和练习所使用的数据,现在在工作中也在使用,之前公司里用oracle,我在做自己的东西的时候觉得用oracle太不方便,于是就找了mysql(当时也考虑过sqlserver,觉得还 ...