Performance 静态代码分析和应用程序性能之间有关系吗

Performance 静态代码分析和应用程序性能之间有关系吗,performance,analysis,Performance,Analysis,我的问题: 性能测试通常在应用程序与各种模块集成并准备部署后进行 在开发阶段是否有任何方法可以识别性能瓶颈。代码分析是否会在性能方面提供任何提示?这完全取决于您在代码分析期间运行的规则,但我认为您不能仅仅通过CA来防止性能瓶颈 从我的经验来看,性能问题通常相当复杂,要找到真正的问题,必须运行性能测试。这完全取决于您在代码分析期间运行的规则,但我不认为仅通过CA就可以防止性能瓶颈 从我的经验来看,性能问题通常相当复杂,要找到真正的问题,必须运行性能测试。否,除非在非常小的情况下(例如,对于Java

我的问题: 性能测试通常在应用程序与各种模块集成并准备部署后进行


在开发阶段是否有任何方法可以识别性能瓶颈。代码分析是否会在性能方面提供任何提示?

这完全取决于您在代码分析期间运行的规则,但我认为您不能仅仅通过CA来防止性能瓶颈


从我的经验来看,性能问题通常相当复杂,要找到真正的问题,必须运行性能测试。

这完全取决于您在代码分析期间运行的规则,但我不认为仅通过CA就可以防止性能瓶颈


从我的经验来看,性能问题通常相当复杂,要找到真正的问题,必须运行性能测试。

否,除非在非常小的情况下(例如,对于Java,在循环中使用StringBuilder,而不是字符串附件)

原因是,在使用相关数据集运行整个应用程序之前,您不知道特定代码段将如何影响整个应用程序


例如:如果您始终对六个元素的列表进行排序,那么将bubblesort更改为quicksort不会对您的应用程序产生显著影响。或者,如果你在午夜运行这种排序,它不会延迟其他处理。

< P>不,除了非常小的情况(例如对于java,使用StringBuilder而不是字符串附加)。< /P> 原因是,在使用相关数据集运行整个应用程序之前,您不知道特定代码段将如何影响整个应用程序


例如:如果您始终对六个元素的列表进行排序,那么将bubblesort更改为quicksort不会对您的应用程序产生显著影响。或者,如果你在午夜运行一次,它不会延迟其他处理。

< P>如果我们在谈论.NET,那么是和不是。FxCop(或内置代码分析)中有许多处理性能问题的规则。然而,这份清单很短,性质也很有限


话虽如此,没有理由不使用更多的规则(启发式或其他)来扩展FxCop,以捕获潜在问题区域并标记它们。这只是一个事实,据我所知,还没有人(在这方面)投入了大量的工作。

如果我们谈论的是.NET,那么是和否。。。FxCop(或内置代码分析)中有许多处理性能问题的规则。然而,这份清单很短,性质也很有限

话虽如此,没有理由不使用更多的规则(启发式或其他)来扩展FxCop,以捕获潜在问题区域并标记它们。这只是一个事实,据我所知,目前还没有人(在这方面)投入大量的工作。

一般来说,没有,尽管我可以看看我以前从未见过的系统,并认识到一些容易出现性能问题的设计方法:

  • 就代码行数或类数而言,它有多大?这与过度设计导致的性能问题密切相关

  • 抽象有多少层?每一层都有可能花费比必要的更多的周期,这种效果会更加复杂,特别是如果每一次操作都被认为是“相当有效”的话

  • 是否有单独的数据结构需要保持一致?如果是,如何做到这一点?如果有人试图通过通知来保持数据结构紧密同步,那就是一个危险信号

  • 在系统输入信息的类别中,是否有某些信息以低频率变化?如果是这样的话,它很可能应该被“编译”而不是“解释”。这在性能和开发的易用性方面都是一个巨大的胜利

  • 一个常见的主题是:程序员A创建包装复杂操作的函数,如DB access,以收集大量信息。程序员A认为这对其他程序员非常有用,并希望这些函数在使用时能有一定的尊重,而不是随意使用。程序员B欣赏这些功能强大的函数,并经常使用它们,因为它们只用一行代码就能完成很多工作。(程序员B和程序员A可以是同一个人。)您可以看到这是如何导致性能问题的,尤其是当分布在多个层上时

这些是我首先想到的事情。

一般来说,没有,尽管我可以看看我以前从未见过的系统,并认识到一些容易出现性能问题的设计方法:

  • 就代码行数或类数而言,它有多大?这与过度设计导致的性能问题密切相关

  • 抽象有多少层?每一层都有可能花费比必要的更多的周期,这种效果会更加复杂,特别是如果每一次操作都被认为是“相当有效”的话

  • 是否有单独的数据结构需要保持一致?如果是,如何做到这一点?如果有人试图通过通知来保持数据结构紧密同步,那就是一个危险信号

  • 在系统输入信息的类别中,是否有某些信息以低频率变化?如果是这样的话,它很可能应该被“编译”而不是“解释”。这在性能和开发的易用性方面都是一个巨大的胜利

  • 一个常见的主题是:程序员A创建包装复杂操作的函数,如DB access,以收集大量信息。程序员A认为这对其他程序员非常有用,并希望这些函数在使用时能有一定的尊重,而不是随意使用。程序员B欣赏这些功能强大的函数,并经常使用它们,因为它们只需使用