Сначала я просто измеряю время часами, чтобы получить общее измерение.
Затем я запускаю его под отладчиком и беру стопки . Они говорят мне, какие строки кода ответственны за большие доли времени. В частности, это означает строки, где функции вызываются без действительно необходимости и ввода-вывода, о которых я, возможно, не знал.
Так как он показывает мне строки кода, которые занимают время и могут быть сделаны лучше, я исправляю их.
Затем я начинаю сверху и вижу, сколько времени я действительно сэкономил. Я повторяю эти шаги до тех пор, пока не смогу найти вещи, которые а) занимают значительный процент времени и б) я могу исправить.
Это было названо "профилированием бедняка". Маленький секрет не только в том, что он дешевый, но и очень эффективный, потому что он избегает распространенных мифов о профилировании .
P.S. Если это интерактивное приложение, делайте все это только с медленной его частью, например, если вы нажмете кнопку «Do Useful Stuff», и она завершится через несколько секунд. Там нет смысла делать стеки выстрелы, когда он ждет вас.
P.P.S. Предположим, что есть какое-то действие, которое должно быть быстрее, но заканчивается слишком быстро, чтобы делать стеки, например, если это занимает секунду, но должно занимать долю секунды. Тогда вы можете (временно) обернуть вокруг него цикл для из 10 или 100 итераций. Это займет достаточно много времени, чтобы получить образцы. После того, как вы ускорили его, удалите петлю.