- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NET性能优化总结.doc
C#.NET性能优化总结
垃圾M收解放了T?工管理对象的工作,提髙了程序的健壮性,但副作用就是程序代W可能对于对象创建变得随意,
0避免不必要的对象创建
由于垃圾回收的代价较高,所以c#程序开发要遵循的一个基本原则就是避免不必要的对象创建。以下列举一些常见的 情形。
1、 避免循坏创建对象。如果对象并不会随每次循环而改变状态,那么在循环中反复创建对象将带來性能损耗。髙效的做 法是将对象提到循环外而创建。
2、 在盂要逻辑分支中创建对象。如果对象只在某些逻辑分支中才被用到,那么应只在该逻辑分支中创建对象。
3、 使用常呈避免创建对象。程序屮不应出现如new Decimal (0)之类的代码,这会导致小对象频繁创建及回收,正 确的做法是使用Decimal. Zero常景。我们冇设汁自己的类时,也可以学习这个设计手法,应用到类似的场景屮。
4、 使川StringBuilder做字符串连接c
0不要使用空析构函数
如果类包含析构函数,由创建对象吋会在Finalize队列中添加对象的引用,以保证当对象无法可达吋,仍然可以调用 到Finalize方法。垃圾回收器在运行期间,会启动一个低优先级的线程处理该队列。相比之不,没宥析构函数的对象就 没冇这些消耗。如果析构函数为空,这个消耗就毫无意义,只会导致性能降低。因此,不要使用空的析构函数。
在实际情况中,许多曾在析构函数中包含处理代码,但后来因为种种原因被 掉或者删除掉了,只留下一个空壳,此吋应 注意把析构阐数本身 抑或删除抑。
0 实现 I disposable 接口
垃圾回收事实上只支持托管內在的回收,对于其他的非托管资源,例如Window GDI句柄或数据库连接,在析构函数屮 释放这些资源冇很大问题。原因是垃圾回收依赖于内存在紧张的情况,虽然数据庳连接可能己濒临耗以,但如果内存还很充 足的话,垃圾|?|收是不会运行的。
C#的IDisposable接口是一种显式释放资源的机制。通过提供using语句,还简化了使用方式(编译器自动生成 try... finally块,并在finally块屮调用Dispose方法)。对于中请非托管资源对象,应为实现IDisposable 接门,以保证资源一旦超出using语句范围,即得到及时释放。这对于构造健壮且性能优的程序非常冇意义。
为防止对象的Dispose力‘法不被调川的情况发生,一般还要提供析构阐数,两者调川一个处理资源释放的公共方法。同 吋,Dispose方法应调用System. GC . SuppressFinalize (this) ? G■诉垃圾M收器无需再处理Finalize方法了。
2. String 操作
0使用StringBuilder做字符串连接
String是不变类,使用+操作连接字符中将会导致创建一个新的字符中。如果字符屮连接次数不是固定的,例如在一 个循环中,则应该使用StringBuilder类來做字符申述接工作。因为StringBuilder内部有一个StringBuffer, 连接操作不会每次分配新的字符串空间。只宥当连接后的字符串超出Buffer大小时,才会中请新的Buffer空间。典型 代码如下:
StringBuilder sb = new StringBuilder(256); for (int i = 0 ; i Results.Count; i++)
{ sb.Append (Results[i]); }
如果连接次数是固定的并且只有儿次,此吋应该直接用+号连接,保持程序简洁易读。实际上,编译器已经做了优化, 会依掘加号次数调用不同参数个数的String.Concat方法。例如:String str = strl + str2 + str3 + str4; 会被编译为String.Concat (strl, str2, str3, str4)。该方法内部会计算总的String长度,仅分配?一次,并 不会如通常想象的那样分配三次。作为一个经验值,当字符串连接操作达到10次以上时,则应该使用StringBuilder.
这里有一个细节应注意:StringBuilder内部Buffe的缺省值为16,这个值实在太小。按StringBuilder的使用
场景,Buffer肯定得嚴新分配。经验值一般用256作为Buffer的初值。当然,如果能计兑出ii终生成字符串长度的 话,则应该按这个值來设定Buffer的初值。使用new StringBuilder (256)就将Buffer的初始长度设为了 256。
0避免不必要的ToUpper或ToLower方法
String是不变类,调用Topper或ToLower方法都会导致创建一个新的字符串。如果被频繁调用,将导致频繁创建字 符串对象。这违背了前而讲到的“避免频繁创建
您可能关注的文档
- MPA教育在中国:出路与选择.doc
- MPA管理会计本量利分析案例.doc
- MPLSLP实际应用.doc
- MPLSVPNMultiast和QS测试题.doc
- MRI、T对良、恶性脊柱压缩骨折的对比研究.doc
- MRI与T检查在老年多发性脑梗死诊断中的.doc
- MRI与线诊断急性化脓性骨髓炎临床对比研究.doc
- MRI及WI在新生儿低血糖脑损伤中的应用.doc
- MRI和T联合诊断脑膜瘤的临床价值观察.doc
- MRI和T诊断嗅神经母细胞瘤的影像表现探讨.doc
- 《GB/T 46383.302-2025电气运输设备 第3-2部分:载物电气运输设备移动性能测试方法》.pdf
- GB/T 46383.302-2025电气运输设备 第3-2部分:载物电气运输设备移动性能测试方法.pdf
- 中国国家标准 GB/T 46383.302-2025电气运输设备 第3-2部分:载物电气运输设备移动性能测试方法.pdf
- 《GB/T 31270.7-2025化学农药环境安全评价试验准则 第7部分:生物富集试验》.pdf
- GB/T 31270.7-2025化学农药环境安全评价试验准则 第7部分:生物富集试验.pdf
- 《GB 5135.2-2025自动喷水灭火系统 第2部分:湿式报警阀、延迟器、水力警铃》.pdf
- GB/T 19412-2025蓄冷(热)空调系统的测试和评价方法.pdf
- 《GB/T 19412-2025蓄冷(热)空调系统的测试和评价方法》.pdf
- 中国国家标准 GB/T 19412-2025蓄冷(热)空调系统的测试和评价方法.pdf
- GB/T 46611-2025电光调制器用铌酸锂单晶薄膜.pdf
最近下载
- PLC技术应用 (S7-200 SMART)项目二 顺序功能图和顺序控制指令及其应用.pptx VIP
- 北京建筑大学2023-2024学年第1学期《环境微生物学》期末考试试卷(A卷)附标准答案.docx
- 地球小博士-全国地理科普知识大赛历年真题及答案(高中组7套试题).pdf VIP
- 赫茨RF300A变频器说明书.pdf VIP
- 久菱JL-E系列变频器说明书.pdf VIP
- 信息技术赋能下的学生评价结果应用,激发高中生学习潜能的策略分析教学研究课题报告.docx
- 附件3:设备部安全责任清单和月度检查表.docx VIP
- 预防流感英文版课件.pptx VIP
- 新技术、新产品、新工艺、新材料应用施工方案(新版).docx VIP
- 危险化学品典型事故案例分析(王如君).pptx VIP
原创力文档


文档评论(0)