通过自己对一些教程、书籍的学习,以及自己在实际开发中的一些体会总结如下,希望能对大家在撰写高效率.net应用程序方面有所帮助:
1,小心使用虚拟堆栈,不要滥用
不要在方法或者是函数中声明太多、太大的局部变量,比较明确的数目不要声明多余64个局部变量,无须实现太大的方法,尽量使用精小、多个实现的方法或者函数,这样可以产生较好的CLR程序代码,JIT也能够据此产生良好的本机执行代码。
2,关于string
string对象的内容不可改变的,如果使用 str="aaaa"+''bbb"等类似的方式来处理字符串,将会造成许多暂时字符串对象的建立和消灭,使得程序极为缓慢;应该采用StringBuilder类来处理类似的情况。
3,垃圾回收
一些书上在介绍垃圾回收的时候,可能会建议大家直接使用GC的垃圾收集方法,但是这样做往往是很危险的,有可能不自觉的执行了和垃圾回收器相反的行为;我们应该避免干扰垃圾回收器的工作,撰写体积比较小的对象;GC.Collect()可能会带来性能数百倍的损失。
4,关于集合Collection
在创建集合(ArrayList、Stack等)的时候最好在初始化的时候声明集合的大小(貌似在满足自己需要的集合的大小的最小素数比较好),定长的集合可以避免过多的复制所带来的性能损失;适当配置集合的大小可能带来很大的性能提升。
5,值类型和引用类型
我们知道值类型是存储在堆栈上的,而引用类型是存储在Heap上的;如果是对象比较小且不需要类特有的一些语义,那么采用值类型是更好的选择,可以带来更好的效率。
6,装箱和拆箱
装箱和拆箱是奢侈的指令,在程序中应该避免使用
7,关于反射
反射可以给我们带来很多方便,但是毕竟这是建立在昂贵的开销上的,所以大家在使用的时候应注意。
8,关于XML
应该避免滥用XML因为这是很昂贵、缓慢的东西。
9,不要滥用Exception
使用exception会在程序中产生Exception表格,这需要额外的内存,而且在Exception产生时也需要搜寻Exception表格中正确种类的Exception,这会让.net应用程序的执行速度缓慢下来;在使用的 使用应该使用明确的Exception比如ArgumentNullException而不是Exception。
10,关于Assembly
尽量值加载需要的Assembly因为这会带来很大的内存占用,自己深有体会,前段时间写的那么小的软件结果占用了几十MB的内存,应该及时卸载不需要的Assembly。
11,关于多线程
在使用多线程的时候,应尽量使用ThreadPool,它是托管的线程池比Thread类有更高的执行效率;同时在使用多线程的时候应该谨慎,使用不当很容易导致整个程序的崩溃
来自:http://hi.baidu.com/1987raymond/blog/item/0d6d914ba3641ef882025cca.html