C#性能优化最佳实践简介.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C# 性能优化最佳实践 1、显式注册的EvenHandler要显式注销以避免内存泄漏 将一个成员方法注册到某个对象的事件会造成后者持有前者的引用。在事件注销之前,前者不会被垃圾回收。 [csharp] view plain copy private void Form1_Load() { …… //注册事件 CommandRemotingContext.CmdChanged += new ReciverCmdStateChangedEventHandler(this.CommandRemotingContext_CmdChanged); …… } private void Form1_FromClosed() { …… //关闭窗体时及时释放事件 CommandRemotingContext.CmdChanged -= new ReciverCmdStateChangedEventHandler(this.CommandRemotingContext_CmdChanged); …… } 由事件引起的内存泄漏问题: 对象A订阅了对象B中的事件 对象A的生命周期远远大于对象B 对象A没有取消订阅对象B的时间 最终导致对象B无法释放 2、控件绑定的数据源批量操作应避免自动刷新 客户端批量操作数据时,控件自带的刷新操作,会造成不必要的时间消耗 当数据源(如DataTable、Array、List、ObservableCollection或其他IListSource等)被绑定到控件时,批量操作数据时应该断开绑定或挂起控件的刷新。 [csharp] view plain copy this.gcBillList.DataSource = null; DataRowCollection rows = this.ds.Tables[0].Rows; foreach (DataRow row in rows) { // DataRow数据操作 } this.gcBillList.DataSource = this.ds.Tables[0].DefaultView; 3、减少客户端与服务端的通信次数 WebService调用并非越少越好,传输数据量较大的情况可考虑拆分为多次调用 对于短WebService的调用,应尽量合并以减少交互次数 [csharp] view plain copy //多次调用了相同的WS txtCompanyName.Text=SCPubFunctionClient.PublicWSCalstring(“ForTest”, “GetCompanyNameByID”,“0001”); txtCompanyInnerName.Text=SCPubFunctionClient.PublicWSCalstring(“ForTest”, “GetCompanyInnerNameByID”,“0001”); //合并相邻的WS string[] result=SCPubFunctionClient.PublicWSCalstring(“ForTest”, “GetCompanyNameAndInnerNameByID”,“0001”); txtCompanyName.Text=result[0]; txtCompanyInnerName.Text= result[1]; 4、减少客户端与服务端的通信次数 如非必要,应尽量避免在循环体内重复调用WebService [csharp] view plain copy //循环调用了相同的WS ListPerson persons; …… foreach(string personID in personIDs) { person=HRPubWsClient.getPerson(personID); persons.Add(person); } //合并WS ListPerson persons; …… persons =HRPubWsClient.getPersonList(personIDs); 5、使用泛型来避免装箱、拆箱操作(减少垃圾回收压力) 装箱操作会造成GC压力;如果发生在集合中,应该使用泛型集合避免。 对于值类型的集合,使用ListT来代替ArrayList,使用DictionaryTKey, TValue 来代替Hashtable。 [csharp] view plain copy ArrayList h=new ArrayList();

文档评论(0)

1192212 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档