Очень хороший бесплатный инструмент, и он у вас уже есть. Единственный недостаток в том, что для начала он может быть не интуитивным.
Когда программа работает медленно, приостановите ее под IDE. Изучите стек вызовов. (Я отключаю отображение аргументов; меня интересуют только конкретные строки кода. Я копирую весь стек в текстовый редактор, например блокнот.) Сделайте это несколько раз. Чем он медленнее, тем меньше сэмплов вам понадобится, прежде чем вы увидите проблему.
Если вы видите одно или несколько утверждений, которые являются подозрительно популярными, как, например, они появляются на здоровой части выборок (как минимум, в двух), вам следует обратить на них внимание. Я беру еще несколько сэмплов, пока они не появятся, потому что я хочу понять, почему они выполняются. Это важно, потому что, если бы я мог заменить их чем-то, что заняло бы намного меньше времени, я бы сэкономил большую долю.
Я попытаюсь объяснить, почему это работает.
Во-первых, общая концепция «узкого места» серьезно вводит в заблуждение.
Программное обеспечение не медленное, потому что оно имеет ограничения или «горячие» места.
Конечно, он может иметь ошибки в кэше и так далее, но главная причина
он медленен в том, что делает больше, чем нужно - часто лот больше.
Это происходит в джункетах вызова вложенных функций,
с оправданиями все более удаленными.
Это проявляется как дерево вызовов, которое гораздо более пушистое, чем необходимо.
Все, что вам нужно сделать, это найти большие ветви, которые вы можете обрезать.
Вот что делает техника паузы.
Так что, пока вы копаетесь в инструменте, который поможет вам играть в детектива, чтобы найти неуловимое «узкое место», станьте хирургом по дереву и обрежьте самые тяжелые ветви, какие вы можете из дерева вызовов, как было найдено при приостановке, и продолжай делать это, пока не сможешь.
Хорошо быть скептиком, но вы можете быть удивлены, насколько хорошо это работает.