- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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();
您可能关注的文档
- endnote管理文献的使用方法及注意事项简介.ppt
- B标段环境保护和水土保持施工方案(土建)2014.08.05简介.doc
- Endnote使用教程简介.ppt
- B超探头的清洁消毒简介.ppt
- Endnote使用经典培训课件简介.ppt
- B超探头完善版简介.ppt
- B型33+1总信息简介.doc
- C#.NET面试试题与答案简介.doc
- C#WinForm实践开发教程chp1.Windows编程基础简介.ppt
- C#插件式程序开发简介.ppt
- 2024 医院工作总结及 2025 年工作计划(范本).pdf
- 2024 医院工作总结及 2025 年工作计划(范本).docx
- 关于X医院2024年工作总结及2025年工作计划(详细版).docx
- 关于X医院2024年工作总结及2025年工作计划(详细版).pdf
- 人教版数学四年级下册位置与方向2教案与反思3篇2024 .pdf
- 传媒伦理与法规(山东联盟)智慧树知到答案2024年山东政法学院.pdf
- 人教版数学五年级下册第16课容积和容积单位教学设计3篇2024 .pdf
- 人教版数学六年级下册圆柱的体积优秀教案(推荐3篇) .pdf
- 职业教育高质量发展赋能新质生产力的内在逻辑与三融”路径.pdf
- 共同机构所有权与企业新质生产力.pdf
文档评论(0)