Первое, что нужно сделать, это отсортировать результаты по сперме. Самое большое узкое место - самое длинное. Затем покопайтесь и посмотрите, что делает эта подпрограмма, и попробуйте найти циклы, содержащие другие методы. Посмотрите количество посещений (вызовов) этих вложенных методов и время, которое они заняли.
Например, допустим, что MyFunc занимает больше всего времени, вы смотрите на него и видите, что у него есть цикл, выполняющий некоторые вещи. Посмотрите в цикле, вы можете увидеть, что MyOtherFunc вызывается внутри цикла, посмотрите снова на таблицу и найдите MyOtherFunc. Звонили 200 раз? Посмотрите, можете ли вы вывести MyOtherFunc из цикла (нужна ли ему переменная переменная в качестве входных данных?).
Например, в псевдокоде, если вы видите это:
FOR (MyVar = 0 TO GetItems().Count) {
print GetItems()[MyVar].Name;
}
Если GetItems возвращает 100 элементов, метод GetItems будет вызываться 200 раз. Профилировщик укажет на такой недостаток большим количеством хитов. Таким образом, вы входите и кэшируете результат в локальной переменной:
var TempVar = GetItems();
FOR (MyVar = 0 TO TempVar.Count) {
print TempVar[MyVar].Name;
}
Теперь он будет вызываться только один раз. Профиль еще раз и сравните свои результаты.
Предупреждение: профилирование может вызвать привыкание, как только вы его освоите!