One could use a profiler, but why not just halt the program? [закрыто]
Если что-то делает однопоточную программу, скажем, в 10 раз дольше, чем нужно, вы можете запустить на ней профилировщик. Вы также можете просто остановить его с помощью кнопки «пауза», и вы точно увидите, что он делает.
Даже если это всего лишь на 10% медленнее, чем должно быть, если вы остановите его несколько раз, вскоре вы увидите, что он постоянно делает ненужные вещи. Обычно проблема заключается в вызове функции где-то посередине стека, который на самом деле не нужен. Это не измеряет проблему, но, безусловно, находит ее.
Изменить: возражения в основном предполагают, что вы берете только 1 образец. Если вы серьезно, возьмите 10. Любая строка кода, вызывающая некоторый процент потерь, например, 40%, появится в стеке в этой части выборок в среднем. Узкие места (в однопоточном коде) не могут от него скрыться.
РЕДАКТИРОВАТЬ: Чтобы показать, что я имею в виду, многие возражения имеют форму «не хватает образцов, поэтому то, что вы видите, может быть полностью ложным» - смутные представления о случайности. Но если что-то излюбое узнаваемое описаниене только в рутину или в рутину, когда она активна, действует в течение 30% времени, тогда вероятность увидеть его на любой данной выборке составляет 30%.
Тогда предположим, что взято только 10 образцов. Сколько раз проблема будет видна в 10 образцах послебиномиальное распределениеи вероятность увидеть его 0 раз равна .028. Вероятность увидеть его 1 раз - .121. В 2 раза вероятность составляет 0,233, а в 3 раза - 0,267, после чего она падает. Поскольку вероятность увидеть его менее двух раз равна .028 + .121 = .139, это означает, что вероятность увидеть его два или более раза составляет 1 - .139 = .861. Общее правило: если вы видите что-то, что вы можете исправить на двух или более образцах, это стоит исправить.
В этом случае шанс увидеть его в 10 образцах составляет 86%. Если вы среди тех 14%, кто этого не видит, просто берите больше образцов, пока не увидите. (Если количество образцов увеличивается до 20, вероятность увидеть его в два или более раз увеличивается до более чем 99%.) Таким образом, оно не было точно измерено, но оно было точно найдено, и важно понимать, что это может быть что-то, что профилировщик не может найти на самом деле, например что-то, связанное с состоянием данных, а не счетчик программы.