可能有几个“问题”,或者让它更快的方法。我不会称它们为“瓶颈”,因为它们通常没有本地化。通常它们是非常好的代码——只是从来没有想过它们会在“关键路径”上。
假设问题在解决后会节省这些百分比:
只需找到其中一个即可为您提供一定程度的加速。就像你只找到 A 一样,这会给你 1/(1-0.3) = 1.43 或 43% 的加速。如果你这样做了,你就可以像大多数人一样开心并停下来。但是,如果您继续并找到 B,您的总加速将是 1/(1-0.51) = 2.04 或 104%。这比 43% 多得多,尽管 B 比 A 小。固定 C 可以让您快 2.92 倍,而 D 可以让您快 4.2 倍。
什么?解决较小的问题有更高的回报?他们可以,因为加速因素复合。按该顺序固定 A 和 B 得到 1.43 * 1.43 = 2.04。如果你碰巧以相反的顺序修复它们,你会得到 1.27 * 1.61 = 2.04
每次你修复某个问题时,其他问题就会变得更大,按百分比计算并且更容易找到,并且加速累积就像高收益投资一样。当你修复 A、B、C、D 和 E 时,剩下的就是 F,不是 5%,而是 30%。修复所有问题,现在您的速度提高了 8.5 倍!但是,如果你错过了一个,比如 D,因为你的分析工具没有暴露它,你的速度只有 4.5 倍。
这就是你没有发现问题所付出的代价。
这就是我依赖手动技术的原因,因为相对于分析器,它会发现他们发现的所有问题,并且会发现他们没有发现的问题。Profiler 经常关心外围问题,例如测量的准确性,这无助于发现问题。如果你想知道为什么,这里是数学。