这真的是两个问题,但是它们非常相似,为了保持简单,我想我只是把它们放在一起:
首先:鉴于已经建立的C#项目,除了简单的代码内优化之外,有什么方法可以加快速度?
其次:在C#中从头开始编写程序时,有哪些好方法可以大大提高性能?
请远离一般优化技术,除非它们是C#特定的.
以前曾要求Python,Perl和Java.
脱离我的头顶:
用通用对应物替换容器类的非泛型变体
减少拳击/拆箱.具体而言,尽可能使用泛型,并且通常避免传递值类型object
.
对于使用许多动态控件的对话框:在使用SuspendLayout
/ 插入所有控件之后暂停绘图ResumeLayout
.这有助于特别是在使用布局容器时.
不幸的是,相对较少的优化是语言特定的.基础知识适用于各种语言:
根据实际负载测量性能
有明确定义的目标来指导您
使用一个好的剖析器
相对较早地优化架构/设计
只有在您遇到问题时才进行微优化
当你完全证明你需要进行微观优化时,探查器往往会明确地寻找什么 - 比如避免装箱和虚拟呼叫.
哦,我能想到的一件事是特定于.NET的:如果您需要经常拨打电话并且当前正在使用反射,请将这些调用转换为委托.
编辑:建议使用泛型和StringBuilder等的其他答案当然是正确的.我(可能错误地)认为那些优化太"明显"了;)
一件简单的事情是确保您的构建配置设置为"Release".这将实现优化并消除调试信息,使您的可执行文件更小.
有关MSDN的更多信息,如果需要.
使用体面的质量分析器并确定您的瓶颈所在.
然后开始询问如何提高性能.
任何在不了解您的表现形象和您的问题领域的情况下做出"避免反思"等一揽子陈述的人都应该被拍摄(或至少重新教育).考虑到.Net格局的大小,谈论C#优化几乎毫无意义:我们是在讨论WinForms,ASP.Net,BizTalk,Workflow,SQL-CLR吗?没有上下文,即使是一般指导原则也可能浪费时间.
还要考虑"加速"和"提高绩效"的含义.您是指更高的资源效率,还是降低最终用户的感知等待时间(假设有一个)?这些是要解决的非常不同的问题.
鉴于论坛,我觉得有必要指出在Code Complete中对这些主题有一些很好的报道.不是C#特定的头脑.但那是件好事.请记住,特定于语言的微优化可能会被包含在您正在使用的任何编译器的下一个版本中.如果for和foreach之间的差异对您来说很重要,那么您可能正在编写C++,对吧?
[我喜欢RedGate的ANTS Profiler,但我觉得它可能会更好]
有了这个,一些想法:
尽可能使用type(SomeType)优先于instance.GetType()
使用foreach优先于
避免拳击
最多(我认为)3个字符串可以做StringA + StringB + StringC.之后你应该使用StringBuilder