【发布时间】:2012-03-27 09:17:27
【问题描述】:
我正在使用 Equatec 分析器来诊断我的应用程序的缓慢进程。我弄清楚了哪种方法慢,但我想具体知道该方法的哪一部分慢。除了将方法分解为多个方法之外,还有没有办法通过Eqatec Profiler API 标记方法的特定部分,以便与整个方法分开分析?
【问题讨论】:
我正在使用 Equatec 分析器来诊断我的应用程序的缓慢进程。我弄清楚了哪种方法慢,但我想具体知道该方法的哪一部分慢。除了将方法分解为多个方法之外,还有没有办法通过Eqatec Profiler API 标记方法的特定部分,以便与整个方法分开分析?
【问题讨论】:
Equatec 是一个很好的分析器,但根据我的经验,这是在大型 .net 应用程序中发生的情况。
您可能会发现一个例行程序在相当多的时间里处于活跃状态,例如 20%,您甚至可能会在其中找到一个特定的“热”行,但您可以看着它,却不知道该怎么做,因为据您所知,这是必要的。
同时,代码中可能存在比代码更大的东西,而在分析器中并没有很好地显示出来,因为它并不局限于一个例程。
如果我只能举一个例子,我已经看到一个应用程序将大约 50% 的启动时间花费在调用堆栈深处的 20-30 层中,以便从资源中获取字符串,以便将它们显示给用户让他们知道什么需要这么长时间。如果它找到另一种方法来做到这一点,它会以两倍的速度启动! ANTS 分析器(另一个不错的)不知道发生了什么。
我是怎么找到它的?旧方法,it's done here,同样是explained here。
下图显示,如果您通过暂停程序手动对堆栈进行 N 次采样,并且在其中 两个 的示例中,您看到它正在执行一些您可以用更快的东西替换的操作,数量您可以节省的时间,以及相应的加速比。
例如,红色曲线 (2/5) 表示,如果您采集了 5 个堆栈样本,并且您看到其中两个可以改进,您不知道具体可以节省多少。然而,最有可能的值是 2/5(40%,加速 67%),平均值是 3/7(43%,加速 75%),它大约在 10% 之间(加速 11% ) 和 70%(加速 3.33 倍)。那是在你认为你不能相信少量样本的情况下。 不是一场糟糕的赌博。 如果您想要更多的确定性,请采集更多样本。
(Beta distributionX ~ Be( number of hits + 1, number of misses + 1 ) 和 Speedup = 1/(1-X) 的绘图。)
【讨论】:
从当前版本 3.8.14 开始:不,这是不可能的。这将是一个很棒的改进,但它不在 EQATEC 的近期路线图中。
【讨论】: