【问题标题】:Performance profiling of Windows Apps. Better alternatives for Visual Studio Profiler?Windows 应用程序的性能分析。 Visual Studio Profiler 的更好选择?
【发布时间】:2011-04-04 02:28:22
【问题描述】:

我对 Visual Studio Profiler 的性能分析印象深刻。快速满足我的目的且易于使用。

我只是想知道 Visual Studio Profiler 中的注意事项。是否有更好的 Windows 应用程序探查器可以更好地解决这些警告?

【问题讨论】:

  • 对我的警告 #1:带有分析器的 Visual Studio 版本的价格标签! :)
  • 查看我在stackoverflow.com/questions/2302425/… 上的回答以获取 Windows 分析器列表。
  • @Adrian Grigore:我同意。 :-) @Patrick:我已经很困了。是的,它非常方便。但只做采样。
  • 同上帕特里克的评论,当你说“只做采样”时,采样(堆栈,在挂钟时间,而不是 CPU 时间,在用户的控制下,每行报告,而不是函数,时间百分比,而不是实际时间或计数)是正确的事情,尽管有很多噪音,其中大部分来自雷德蒙德。

标签: windows performance comparison profiling


【解决方案1】:

从积极的方面来说,没有人能像 Microsoft 一样制作出色的应用程序。 Visual Studio 是一款出色的产品,它的分析器具有这些属性。

另一方面,也有一些注意事项(其他分析人员也有同样的看法)。

  • 在采样模式下,线程阻塞时不采样。因此它对无关的 I/O、套接字调用等是视而不见的。这是一个可以追溯到早期的 profgprof 的属性,它们最初是作为 PC 采样器,并且由于当阻止 PC 时没有意义,所以采样被关闭。 PC 可能毫无意义,但堆栈准确地说明了线程被阻塞的原因,当有很多时间进入时,你需要知道它。

  • 在检测模式下,它可以包括 I/O,但它只为您提供功能级别的时间百分比,而不是线路级别。如果函数碰巧很小,或者它们只在少数地方相互调用,那可能没问题,因此找到调用站点并不难。我与优秀的程序员一起工作,但我们的代码并非都是这样。事实上,调用站点通常是不可见的,因为它们是编译器插入的。另一方面,无论是谁编写的,堆栈样本都能精确定位这些调用。

分析器很好地向您展示了不同线程的活动之间的划分。那么你需要知道的是,如果一个线程被挂起或显示出低处理器活动,是因为它阻塞了一些它实际上不需要的东西吗?堆栈样本可以告诉您是否可以在阻塞期间获取它们。另一方面,如果一个线程剧烈转动,你知道它正在做的事情是否真的有必要或可以减少吗?堆栈示例也会告诉您这一点。

许多人认为分析器的主要工作是测量。就个人而言,我想要一些能够精确定位代码的东西,这些代码需要花费大量时间并且可以更有效地完成。大多数时候,这些是函数调用站点,而不是“热点”。我不需要精确地知道“很多时间”。我知道,比如说,60% +/- 20% 对我来说完全没问题,因为我正在寻找问题,而不是测量。如果因为这种不精确,我修复了一个不是最大的问题,那没关系,因为当我重复这个过程时,最大的问题会更大,以百分比表示,所以我不会错过它。

【讨论】:

  • 哦,我看到了火焰的种子。 “没有人能像微软一样制作出色的应用程序”??
  • @ragu.pattabi:我不认为它是火焰。 (我有火焰能力。)我确实认为微软制作了很棒的应用程序。与此同时,他们也不能幸免于普遍存在的误解,至少在绩效方面是这样。以下是这些误解的列表,以及如何克服它们的非常明确的积极声明:stackoverflow.com/questions/1777556/alternatives-to-gprof/…
  • @ragu.pattabi:如果我可以简而言之,普遍的概念是要优化的性能问题包括程序计数器花费大量时间的代码,而聪明的侦探工作是需要找到他们。两方面都错了。软件越大,要修剪的代码就越有可能是调用树的分支,而不是叶子,而且墙时堆栈采样是一种非常容易找到它们的方法,根本不需要聪明。
猜你喜欢
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
相关资源
最近更新 更多