“性能调用图”和“方法详细信息”视图帮助您识别您的应用程序中消耗时间最多的部分。然后您可以调查是否可以使这些消耗时间的区域更高效。当分析应用程序代码时,清楚最常见的导致性能欠佳的编码错误很有用。
不必要的计算:随着应用程序的演化和算法的优化,或者随着数据的更改,在早先的版本中需要的代码部分可能逐渐被废弃,但从没有被除去。因此,许多大型程序执行某些计算,而计算结果从来用不到。该无效代码所浪费的时间会引起瓶颈。
其它常见的不必要计算是那些即使不需要它们,也会自动或缺省进行的计算。此类瓶颈的示例包括,在程序关闭期间不必要地释放数据结构的应用程序,或即使没有用户也会打开到工作站的连接的应用程序。您可以对性能进行概要分析,以查找在无效代码上花费的时间。一旦您确信计算的结果是无用的,则可以除去该代码。
过早计算:任何在需要计算结果之前就执行的计算会导致瓶颈。例如,如果用户尚未请求执行排序,可能就没有理由要对一列数字排序。性能数据不能告诉您是否可以延迟计算;但是,它可以告诉您计算成本,而您可以决定是否要延迟它。
不必要的重新计算:程序有时重新计算所需要的值,而不是高速缓存它们以供以后使用。例如,如果将确定常量字符串长度的计算嵌套在循环中,就会导致不必要的计算;字符串的长度被重新计算很多次,每次都获得相同的值。您的性能数据可以告诉您发生重复计算的位置,而您可以决定是否在执行一次计算后就存储该值。
低效的计算:选择算法或数据结构布局欠佳会引起多余的程序工作。初始的性能可能似乎可以接受(在数据集小的前提下),但以后当出现较大或较复杂的数据集时,性能就难以提高。性能概要分析可以告诉您不同等级上的每个计算的成本,以便您可以预测当仍使用较大型的数据集时是否会有问题。然后您可以使用作为替代的算法和数据结构,使工作可以更快地完成。
内存泄漏和线程瓶颈也会降低性能。 使用泄漏检测和线程分析概要分析集合来收集数据解决这些问题。注意您不能在收集泄漏检测数据的同时收集其它运行时分析数据。