一位同事和我正在查看VS2012中的Visual Studio性能分析报告,他们问我:“为什么要用百分比来表示方法或调用该方法所用时间的持续时间?”
我的解释是该工具提供了一些表示方法/调用需要很长时间或方法的哪些部分需要很长时间。现在,这可以是抽象(百分比)或绝对值(时间(毫秒)),但要么足以指向应用程序中的问题区域。
我们并不特别相信,所以我想我会问互联网。
答案 0 :(得分:7)
这是Visual Studio Profiler团队的Andre Hamilton。值为百分比而非毫秒的原因是因为您看到的是基于样本分析而非基于检测的分析的报告。
示例性分析 基本上操作系统会定期进行堆栈遍历。您在分析报告中看到的结果表示操作系统执行特定功能在堆栈上的堆栈遍历的时间的一小部分
仪器分析 我们基本上修改二进制文件(静态或动态)并拦截函数的开始和结束。然后我们在启动和退出函数时采用时间戳。这将为您提供有关函数执行的精确信息,但它不是免费的。因为在每个函数进入和退出时都会获取信息,所以生成的分析报告可能非常庞大(只需几秒钟的程序执行就不会有超过1GB的数据)。此外,如果在签名二进制文件上使用静态检测,则需要将它们重新签名。这可能使开发过程复杂化。动态检测在这里有所帮助,但这不会使您免于数据开销。除非你专门寻找时间信息,否则采样实际上是其他海报所表达的方式。
FYI Visual Studio附带了用于静态检测的vsinstr(可在\ Team Tools \ Performance Tools中找到)。
答案 1 :(得分:2)
实际上,除了百分比之外,一些分析者确实给出了绝对时间。
真正的问题是这些时间的有用性,考虑到您可以根据当前机器负载和当前机器的规格等因素获得不同的时序。另外,请记住,当您在分析器中运行代码时,它的运行速度比未运行的运行速度慢,因此即使是分析运行也无法准确反映实际运行时间。
由于这些原因,有些人可能认为绝对时间无关紧要。如果您假设时间之间的变化乘以某个数字,则百分比将是要查看的数量。然后百分比将保留绝对时间之间的比率,因此如果某些事情花费两倍的时间,它将具有两倍的百分比。
当然百分比并不完美,因为无法保证变化会成倍增加(例如,开销会增加)。
答案 2 :(得分:2)
目标是什么?
只需花时间测量就可以使用powerpoint吗?或...
找出如何让整个事情花费少的时间? (除了在更快的芯片上运行它。)
如果目标是(2),那么要做的就是找到软件中的活动a)占据挂钟时间的很大一部分,而b)并不是绝对必要的。 原因是如果你可以摆脱采取X分数(如50%)时间的活动,那么你得到的加速因子最多为1 /(1-X)或两次。 / p>
我在这里小心使用“活动”这个词,因为它是一个非常普遍的概念。 如果您只是认为自己正在寻找“缓慢的例行程序”,那么如果您真的关心绩效,那么您将会错过大加速的机会,这是您无法承担的。
关键是加速机会就像石头一样。它们有多种尺寸,尺寸范围很广。如果你不删除中的每一个,那么你将与那些你没有得到的人生活在一起。 例如,如果它们中有三个,并且在删除时它们可以节省50%,25%和12.5%,那么如果你完成所有这三个,你将获得8倍的加速。非常好。 但是,如果你错过了其中一个,你就不会接近它。
Profilers应该是摇滚发现者,但如果他们错过了一个,你怎么会知道? 如果探查器的输出看起来令人印象深刻,但似乎并没有提示你实际上可以修复,是否意味着没有? 不。 More on all that.
答案 3 :(得分:1)
以毫秒为单位的时间因许多因素而异 - 您的开发机器可能有四个处理器和32GB RAM - 但用户机器可能只有单核和1GB RAM。
什么是一致的(主要是 1 )是“占用时间最长的位” - 所以百分比可以帮助您识别代码中最慢的部分,这些部分是您可以获得的大部分时间都来自优化。
1 尽管编译器可以根据处理器优化代码。
答案 4 :(得分:0)
百分比很好。但是需要有几毫秒的时间。如果你必须比较执行相同任务的两个版本的软件,一个比另一个花费更长的时间。百分比比每个函数花费的绝对时间更难比较。为什么不让我们选择看绝对时间的百分比呢?
我很惊讶这已经没有提起过了。