当我的应用程序工作时,我发现它对任何命令都没有响应,并且 CPU 被 100% 使用。我使用了分析器,发现应用程序 99% 的时间都花在了一种方法上(这不是预期的)。
我不确定这个方法是被重复调用还是在内部某个地方“循环”(或者可能是死锁)。
我没有从探查器结果中获得太多信息:
我不明白为什么两条彼此靠近的线有如此不同的数字(一条为 16%,另一条为 0.2%)。
我怎样才能找出问题出在哪里?
当我的应用程序工作时,我发现它对任何命令都没有响应,并且 CPU 被 100% 使用。我使用了分析器,发现应用程序 99% 的时间都花在了一种方法上(这不是预期的)。
我不确定这个方法是被重复调用还是在内部某个地方“循环”(或者可能是死锁)。
我没有从探查器结果中获得太多信息:
我不明白为什么两条彼此靠近的线有如此不同的数字(一条为 16%,另一条为 0.2%)。
我怎样才能找出问题出在哪里?
要获得更好的分析会话,请使用 Instrumentation :这将告诉您方法被调用了多少次。您还可以使用此“调用层次结构”来检测递归调用。
编辑:它在向导中可用
您正在curPrice
比较moveTo
. 这些属性中的任何一个可能会用于执行大量代码,还是其中一个属性重载了比较运算符?它看起来通常curPrice
小于等于它是第一个。moveTo
skipped...Bid
curPrice
这意味着您可以通过找到一种更快的方法来进行这些比较,从而节省多达 32% 的时间。这是 1/(1 - .32) = 1.47 的加速因子,或接近 50%。
我做了很多性能调整,我不使用分析器。我使用这种方法 ,其他一些人也使用这种方法。如果我对这段代码进行 10 个堆栈样本,平均有 3.2 个样本会在堆栈上显示这些比较中的一个或另一个,以及原因。它不会给出确切的百分比,但这并不重要——它们足够大,可以修复。