c#.net性能优化总结

c#.net性能优化总结

ID:13173127

大小:105.39 KB

页数:17页

时间:2018-07-21

c#.net性能优化总结_第1页
c#.net性能优化总结_第2页
c#.net性能优化总结_第3页
c#.net性能优化总结_第4页
c#.net性能优化总结_第5页
资源描述:

《c#.net性能优化总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C#.NET性能优化总结RevisionHistoryDateRevisionDescriptionAuthorApprovedby2009.2.61.0.0.1起草尤西锋目录1.垃圾回收2þ避免不必要的对象创建3þ不要使用空析构函数3þ实现Idisposable接口32.String操作4þ使用StringBuilder做字符串连接4þ避免不必要的ToUpper或ToLower方法5þ最快的空串比较方法53.类型系统6þ避免无意义的变量初始化6þValueType和ReferenceType6þ尽可能使用最合适的类型84.

2、异常处理8þ不要吃掉异常8þ不要吃掉异常信息8þ避免不必要的抛出异常8þ避免不必要的重新抛出异常9þ捕获指定的异常不要使用通用的System.Exception9(2021-10-18第17页共17页拟文人:尤西锋þ要在finally里释放占用的资源105.反射10þ反射分类10þ动态创建对象11þ动态方法调用11þ推荐的使用原则116.基本代码技巧12þ循环写法12þ拼装字符串12þ避免两次检索集合元素13þ避免两次类型转换14þ为字符串容器声明常量14þ使用StringBuilder15þ避免在循环体里声明变量157.H

3、ashtable16þHashtable机制16þ使用HashTale代替其他字典集合类型的情形178.避免使用ArrayList179.从XML对象读取数据181.垃圾回收垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意。þ避免不必要的对象创建由于垃圾回收的代价较高,所以C#(2021-10-18第17页共17页拟文人:尤西锋程序开发要遵循的一个基本原则就是避免不必要的对象创建。以下列举一些常见的情形。1、避免循环创建对象。如果对象并不会随每次循环而改变状态,那么在循环中反

4、复创建对象将带来性能损耗。高效的做法是将对象提到循环外面创建。2、在需要逻辑分支中创建对象。如果对象只在某些逻辑分支中才被用到,那么应只在该逻辑分支中创建对象。3、使用常量避免创建对象。程序中不应出现如newDecimal(0)之类的代码,这会导致小对象频繁创建及回收,正确的做法是使用Decimal.Zero常量。我们有设计自己的类时,也可以学习这个设计手法,应用到类似的场景中。4、使用StringBuilder做字符串连接。þ不要使用空析构函数如果类包含析构函数,由创建对象时会在Finalize队列中添加对象的引用,以保证

5、当对象无法可达时,仍然可以调用到Finalize方法。垃圾回收器在运行期间,会启动一个低优先级的线程处理该队列。相比之下,没有析构函数的对象就没有这些消耗。如果析构函数为空,这个消耗就毫无意义,只会导致性能降低。因此,不要使用空的析构函数。在实际情况中,许多曾在析构函数中包含处理代码,但后来因为种种原因被注释掉或者删除掉了,只留下一个空壳,此时应注意把析构函数本身注释掉或删除掉。þ实现Idisposable接口垃圾回收事实上只支持托管内在的回收,对于其他的非托管资源,例如WindowGDI句柄或数据库连接,在析构函数中释放这

6、些资源有很大问题。原因是垃圾回收依赖于内存在紧张的情况,虽然数据库连接可能已濒临耗尽,但如果内存还很充足的话,垃圾回收是不会运行的。C#的IDisposable接口是一种显式释放资源的机制。通过提供using语句,还简化了使用方式(编译器自动生成try...finally块,并在finally块中调用Dispose方法)。对于申请非托管资源对象,应为其实现IDisposable接口,以保证资源一旦超出using语句范围,即得到及时释放。这对于构造健壮且性能优良的程序非常有意义。为防止对象的Dispose方法不被调用的情况发生

7、,一般还要提供析构函数,两者调用一个处理资源释放的公共方法。同时,Dispose方法应调用System.GC.SuppressFinalize(this),告诉垃圾回收器无需再处理Finalize方法了。(2021-10-18第17页共17页拟文人:尤西锋1.String操作þ使用StringBuilder做字符串连接String是不变类,使用+操作连接字符串将会导致创建一个新的字符串。如果字符串连接次数不是固定的,例如在一个循环中,则应该使用StringBuilder类来做字符串连接工作。因为StringBuilder内部

8、有一个StringBuffer,连接操作不会每次分配新的字符串空间。只有当连接后的字符串超出Buffer大小时,才会申请新的Buffer空间。典型代码如下:StringBuildersb=newStringBuilder(256);for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。