Многие профилировщики такие.
Вам нужно знать не , где программа тратит свое время, а , почему . Есть ли ссылки на динамический анализ кода?
ДОБАВЛЕНО: Вот как Я нахожу "узкие места" в своем коде. (Я ненавижу это слово.)
Вот список причин, по которым.
Вполне естественно предположить, что для того, чтобы найти «узкие места», нужно как-то много измерять.
Это настолько естественно, что почти все профилировщики основаны на нем.
На самом деле поиск и измерение - это не одна и та же проблема. Измерение необходимо, чтобы увидеть, если то, что вы нашли (и исправили), изменило ситуацию. Для меня поиск того, что исправить, больше похоже на отладку, чем на измерение.
Простейший способ объяснить это - начать с бесконечного или почти бесконечного цикла. Как вы это нашли? Вы делаете паузу и смотрите на стек, верно? потому что вы знаете, проблема где-то в стеке. Вам нужно только сделать паузу один раз, а затем вам нужно изучить код в стеке. Сделайте паузу несколько раз, если хотите быть уверенным, что нашли это.
Предположим, что код занимает только вдвое больше времени, чем необходимо. Это означает, что когда вы делаете паузу, есть 50% шанс, что вы увидите, что он делает ненужные вещи. Если вы сделаете паузу и посмотрите на нее 10 раз, вы поймаете это примерно 5 раз. Фактически, как только вы заметите, что он делает что-то, что вы можете оптимизировать всего за 2 сэмпла, вы обнаружите «узкое место». Исправьте это, измерьте ускорение, покажите его и повторите.
Даже если ваша самая большая проблема не очень большая, этот метод в конечном итоге найдет ее.
Кроме того, существует явление увеличения, при котором небольшие проблемы легче найти после удаления более крупных. Это позволяет продолжать работу до тех пор, пока код не станет почти оптимальным.
P.S. После того, как вы это сделаете, все еще могут быть возможности для ускорения. Например, алгоритмы оптимизации могут зависеть от численной устойчивости. Управляемые сообщениями архитектуры могут усложнить отслеживание того, почему выполняется код. В программном обеспечении реального времени проблемы с производительностью могут возникать лишь изредка, и их проще отобрать. Это требует большей сообразительности. Откат на измерения просто не делает этого.