Можете ли вы запустить его под отладчиком и приостановить его вручную, пока он работает медленно? Если вы сделаете это несколько раз, вы узнаете, какие самые большие узкие места.
Например, если он находится в процессе ожидания веб-запроса или запроса API, он будет на вершине стека. Затем посмотрите на строку кода на один уровень вниз по стеку, которая является вызовом функции. Запрос ввода / вывода выполняется , потому что этого вызова функции. Затем посмотрите на следующую строку - тоже самое.
То же самое верно, если не выполняет ввод / вывод, как если бы это были вычисления.
Каждая строка кода в стеке вызовов несет полную ответственность за этот отрезок времени.
Итак, если вы сделаете паузу несколько раз, любая строка кода, которая появляется в стеке вызовов более чем на одну паузу, говорит о том, что это узкое место, если есть какой-либо способ, которым вы могли бы удалить его или выполнить его реже .
Вот более полное объяснение.