Мой любимый метод профилирования замедляет программу в сторону вниз, и это нормально. Я запускаю программу под отладчиком с реалистичной загрузкой, а затем вручную прерываю ее. Затем я копирую стек вызовов где-то, как в Блокнот. Таким образом, требуется порядка минут, чтобы собрать один образец . Затем я могу либо возобновить выполнение, либо можно начинать все сначала, чтобы получить другой образец.
Я делаю это 10 или 20 раз, достаточно долго, чтобы увидеть, что на самом деле делает программа с точки зрения настенных часов. Когда я вижу что-то, что часто появляется, я беру больше образцов, пока оно не появится снова. Затем я останавливаюсь и действительно изучаю, что происходит и почему, что может занять 10 минут или больше. Вот как я узнаю, можно ли заменить это действие более эффективным кодом, т. Е. Оно не было абсолютно необходимым.
Видите ли, мне не интересно измерять, насколько быстро или медленно он идет. Я могу сделать это отдельно, возможно, только с часами. Мне интересно выяснить, какие действия занимают большой процент времени (не сумма , процент ), и если что-то занимает большой процент времени, это вероятность того, что каждый стопка увидит это.
Под «активностью» я не обязательно подразумеваю, где компьютер зависает. В реалистичном программном обеспечении ПК почти всегда выключен в какой-либо системе или библиотеке. Как правило, более важным является вызов сайтов в нашем коде. Например, если я вижу строку из 3 вызовов, отображающуюся на половине выборок стека, это представляет собой очень хороший поиск, потому что, если какой-либо из них не является действительно необходимым и с ним можно покончить, время выполнения уменьшится на половина.
Если вам нужен улыбающийся менеджер, просто сделайте это один или два раза.
Даже в том, что, по вашему мнению, были бы математически сложными научными приложениями, где вы думаете, что низкоуровневая оптимизация и горячие точки будут управлять днем, вы знаете, что я часто нахожу? Подпрограммы математической библиотеки проверяют аргументы , а не работают. Часто код не делает то, что вы думаете, он делает, и вам не нужно запускать его на максимальной скорости, чтобы это выяснить.