技术开发 频道

为.net加速

IT168 技术评论】作为一个.NET程序员,我们可能对性能优化不太在意。性能优化与否能产生什么区别?做任何事情都有好几种方法,大多数都差不多,不是吗?真相是,通常,你编写代码的方式和你使用的数据结构都可以让你的应用程序的效率有天壤之别。这些利害关系导致了重要的区别,并且让你在权衡折中的时候牢记一些重要的事情。 

     • 采用Dispose而不是依赖于Finalize事件。Dispose是一个你自己创建的方法,并且当你不需要某个对象时必须被执行——所以,这是一个完完全全手动编写的步骤。而Finalize事件总是自动的发生。但是,Finalize只有当对象被作为垃圾收集后才会发生,并且需要20倍的执行时间。别忘记在你的Dispose方法中调用GC.SupressFinalize哦。

     • 在实际应用中避免异常。虽然异常处理显著地让你的代码更整洁了,但是它对运行效率的影响是很大的。别在没有异常的环境中仅为了把数据传回常规调用就使用异常处理。如果可能,在执行动作前先运行界面以降低触发异常的可能性——比如,在打开一个文件之前先检查它是否存在,而不是去处理一个根本就不存在的异常。 

    • 当设计值类型和类结构时,别忘了值类型要比引用类型快很多,因为值类型是分配到堆栈,而引用类型是被分配到堆的。 

    • 但是得当心!如果你像使用引用类型那么频繁的使用一个值类型的话,值类型的优势会很快被耗尽。比如,把一个值类型压到一个含有对象类型的群集。这叫做装箱,很耗用处理器周期,尤其是当你的代码在把它作为值(对它进行数学运算)和把它作为引用之间来回运行时。 

    • 尽可能使用最合适的类型来描述数据,从而减少类型转换。 

    • 使用泛型来创建群集和其它的数据结构,这样,在运行时,它们就可以被实例化来存储刚好合适的类型。这节省了装箱/拆箱和类型转换的时间。

    • 在C#中使用as,而不是is。关键字is用来查看引用是否可以被作为某个具体的类型,但是并不返回转换到这个类型的引用。所以,通常当你从is获得一个正的结果时,你首先应该cast——有效地执行两次cast。采用as关键词时,如果可用,则返回cast为新类型的引用;否则返回null。你可以查看null然后做你喜欢做的事情。整体来说,As方法要比is方法快50%。

0
相关文章