access_time 13 years ago language中文
more_vert

关于提高.net应用程序效率的一些经验总结

visibility 234 comment 0

通过自己对一些教程、书籍的学习,以及自己在实际开发中的一些体会总结如下,希望能对大家在撰写高效率.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类有更高的执行效率;同时在使用多线程的时候应该谨慎,使用不当很容易导致整个程序的崩溃

info Last modified by Raymond 13 years ago copyright This page is subject to Site terms.
Like this article?
Share on

Please log in or register to comment.

account_circle Log in person_add Register

Log in with external accounts

Follow Kontext

Get our latest updates on LinkedIn.

Want to contribute on Kontext to help others?

Learn more

More from Kontext

visibility 567
thumb_up 0
access_time 5 months ago