8

分析与日志记录有何不同?

是否只是将分析用于性能测量以查看每个功能需要多长时间?还是我下班了?

通常,如何使用分析库?

通过分析获得哪些类型的统计信息?

4

8 回答 8

22

日志记录告诉你发生了什么。它非常适合取证和调试。

分析量化了这一点:它告诉您代码在每个区域花费了多少时间,或者代码体执行了多少次。它可以帮助您提高代码的性能。

分析通常在代码行、函数调用或有时是文件的级别上运行。对于每个级别,它通常可以告诉您:

  • 该单元执行了多少次。优化很少使用的代码通常不如优化执行数百万次的代码重要。一个例外是使用户(或另一个进程)等待它完成的代码。

  • 一个分支被占用了多少次,比如在一个iforswitch语句中。同样,您通常最关心优化常用代码。

  • 在特定功能上花费了多少时间警告:即使是经验丰富的开发人员也常常对这些结果感到惊讶。很难预测你的“时间沉没”在哪里。

  • 在函数中花费了多少时间以及在该函数中调用的所有函数。也许需要优化的不是函数本身,而是它的子函数。

  • 每个呼叫者呼叫该单元的次数。你可能会发现一个特定的函数主要是从一个意想不到的地方调用的。

借助来自良好分析器的数据,您通常可以以相对较少的努力获得显着的性能改进。

于 2008-10-28T03:33:42.687 回答
3

分析是关于确定函数/方法调用的性能,例如

  • 花在函数上的时间
  • 在函数中花费的时间 + 在子函数中花费的时间
  • 调用特定函数的次数

概要分析的整个想法是对系统有一个很好的概述,以确定可以在哪里进行优化。如果您知道某个特定函数的调用次数比调用次数第二多的函数多 20 次,那么您就知道何时应该集中精力进行优化。

它还向您展示了应该在哪里度过您的时间。您不想花一天时间优化一个每小时只调用一次的函数。您希望将时间集中在优化那些每秒被调用多次的函数上。

在我的理解中, Logging只是跟踪调用的内容(但没有与每个调用相关的详细元数据)。

诸如 Rational Quantify 之类的分析库通过检测代码在运行时收集统计信息来工作。这将产生隐含的性能影响,但在整个系统中都是相对的。

于 2008-10-28T03:37:19.747 回答
2

分析用于确定程序的运行时效率。它可用于测量内存使用情况或 CPU 使用情况。您可以使用它来优化您的代码。

另一方面,日志记录是一种审计功能。您想查看程序在运行时做了什么。它更多地用于调试而不是性能。

于 2008-10-28T03:34:39.750 回答
1

我将分析视为性能测量,您不必分析运行的每一段代码,有时针对特定区域会更好。

日志记录是存储信息以供以后使用,这些信息可能与分析有关,但不一定。它可能只是记录发生的事情。

我曾经使用过的所有分析工具基本上都允许您存储“事务”的开始时间和结束时间,然后再操作数据以查看花费最多的时间。

于 2008-10-28T03:32:32.610 回答
1

日志记录是为了审计或故障排除而记录所做的事情。我想说,剖析是衡量性能的技术。分析可以通过记录性能指标来完成,也可以通过使用专门的工具或实用程序来检查系统运行时的状态来完成。

于 2008-10-28T03:32:49.117 回答
1

日志语句通常写在源代码本身中,而通过分析,您可以在代码编译对其进行修改,然后仅针对分析会话进行检测(即,在构建本身的任何版本中都不存在分析代码。)和实时测量性能,也可以对其进行采样,以便以更精细但侵入性更小的方式跟踪性能。

于 2008-10-28T03:34:42.043 回答
1

日志记录告诉你有多少问题发布到 stackoverflow。

分析会告诉您发布每个问题需要多长时间,以及您在这里花费了多少工作日。

于 2008-10-28T11:05:26.720 回答
1

前面的答案是对的。

然而,恕我直言,分析器比枪更烟雾,我敢打赌这会导致一些箭头被点击。

如果您想知道一个函数负责多少时间,您需要知道它被调用了多少次以及调用它需要多长时间。其中一个没有另一个是没有用的。

即使它告诉你这两个,它也不会告诉你函数内部的哪些语句对时间负责。它们会告诉你很多东西,比如带注释的调用图等等,但它仍然以许多线索的形式出现,你必须对其进行解谜,让你的猜测听起来更“有根据”。

然后他们谈论这些数字有多“准确”。进行了很好的演示,但没有解决问题。

他们能做的(他们没有做的)是指着特定的陈述或指示说

如果您可以摆脱它,这里的这个精确语句将为您节省 X% 的总执行时间。

并按 X 排序。

如果您确实需要解决性能问题,那就是您所需要的,您可以自己轻松搞定。看这里:
        如何优化程序的性能

于 2008-11-04T16:20:44.033 回答