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

时间:2008-10-28 03:30:49

标签: logging profiling

分析与记录有何不同?

是否只是将性能分析用于性能测量以查看每个函数需要多长时间?还是我离开了?

通常,如何使用分析库?

通过分析获得哪些类型的统计数据?

8 个答案:

答案 0 :(得分:20)

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

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

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

  • 执行了多少次单位。与执行数百万次的代码相比,优化很少使用的代码通常不那么重要。一个例外是让用户(或另一个进程)等待它完成的代码。

  • 分支的次数,例如ifswitch声明。同样,您通常最关心的是优化常用代码。

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

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

  • 每个来电者​​单位多少次。您可能会发现主要从意外的地方调用特定函数。

使用来自优秀分析器的数据,您可以通过相对较少的努力获得性能方面的显着改进。

答案 1 :(得分:3)

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

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

分析的整个想法是对系统进行良好的概述,以确定可以进行优化的位置。如果您知道特定函数被调用的次数比第二次调用次数最多的函数多20倍,那么您就知道何时关注优化工作。

它还会向您显示花费时间的。您不希望花一天时间优化每小时只调用一次的函数。您希望将时间集中在优化那些每秒多次调用 的函数。

根据我的理解,

记录只是跟踪所调用的内容(但没有与每个调用关联的详细元数据)。

Rational Quantify等分析库通过检测代码来收集正在运行的统计信息。这将产生隐含的性能影响,但它在整个系统中是相对的。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

记录正在记录为审核或故障排除而执行的操作。我会说,分析是衡量绩效的技巧。可以通过记录性能指标来完成性能分析,也可以通过使用专用工具或实用程序来检查系统运行时的状态。

答案 5 :(得分:1)

日志语句通常是在源代码本身中编写的,而使用profiling,您可以在编译之后修改代码并且检测然后仅用于分析会话(即,构建本身的任何版本中没有分析代码。)并实时测量性能,或者可以采样,以便它可以跟踪以较小粒度但较少侵入性的方式表现。

答案 6 :(得分:1)

日志记录会告诉您如何将许多问题发布到stackoverflow。

分析告诉您发布每个问题需要多长,以及您在此处花费的工作日

答案 7 :(得分:1)

之前的答案是正确的。

然而,恕我直言,个人资料比枪支更吸烟,我打赌这会导致点击一些箭头。

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

即使它告诉你这两个,它也不会告诉你函数内部的哪些语句负责时间。它们会告诉你很多东西,比如带注释的调用图和诸如此类的东西,但它仍然以许多线索的形式存在,你不得不拼错,让你的猜测听起来更“知情”。

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

他们可以做什么(而他们没有)指出特定的陈述或说明并说

  

这里的精确陈述,如果你可以摆脱它,将节省你总执行时间的X%。

并按X排序。

如果您真的需要解决性能问题,那就是您需要的,并且您可以轻松地自行获取。看这里:
How to Optimize your Program's Performance