更新: 2008 年 7 月

术语“性能”通常指程序的执行速度。有时候,通过遵循源代码中的一些基本规则便可以提高执行速度。在某些程序中,仔细检查代码并使用探查器确保程序可以尽可能快地运行非常重要。在另一些程序中,由于在编写时代码运行得足够快,因此不必进行此类优化。

在衡量性能并针对性能进行优化时,应遵循下面这些通用准则:

  • 首先,确立性能目标并衡量程序的性能,以确定代码何时达不到这些目标。

  • 开始编写代码时,使代码正确,遵循良好的设计准则并清楚地表达您的意图。仅当您确定代码达不到性能目标时才在以后进行优化。针对性能进行优化的代码通常更加难于阅读和维护。一般情况下,编写可读、可靠且可维护的代码会更好一些,但其运行速度比您编写的多数优化代码要慢一些。

  • 如果必须进行优化,应首先从程序的最慢部分入手。如果确定某个程序达不到性能目标,请找出性能可以提高的具体位置并确定哪些性能问题是程序运行慢的主要原因。优化几乎不调用的方法,或者如果整个程序必须等待 30 秒让方法 B 在另一线程上运行,才能对方法 A 进行优化使其在 50 毫秒内运行,这些通常是没有用的。

装箱和取消装箱

如果必须频繁地将值类型装箱,则最好避免使用值类型,例如在非泛型集合类(如 System.Collections..::.ArrayList)中。可以通过使用泛型集合(例如 System.Collections.Generic..::.List<(Of <(T>)>))来避免将值类型装箱。装箱和取消装箱都是需要大量运算的过程。对值类型进行装箱时,必须创建一个全新的对象。此操作所需时间可比简单的引用赋值操作长 20 倍。取消装箱时,强制转换过程所需时间可达赋值操作的四倍。有关更多信息,请参见装箱和取消装箱

字符串

在连接大量字符串变量时,例如在紧凑循环中,请使用 System.Text..::.StringBuilder 而不是 C# + 运算符。有关更多信息,请参见如何:串联多个字符串(C# 编程指南)

析构函数

不应使用空析构函数。如果类包含析构函数,Finalize 队列中则会创建一个项。调用析构函数时,将调用垃圾回收器来处理该队列。如果析构函数为空,只会导致性能降低。有关更多信息,请参见析构函数

其他资源

请参见

修订记录

日期

历史记录

原因

2008 年 7 月

在有关装箱和取消装箱的章节中增加了一些信息。

信息补充。

2008 年 7 月

增加了有关字符串的一节。

信息补充。

2008 年 7 月

增加了简介部分的信息。

信息补充。