Вы можете получить гистограмму счетчика программы, но она практически бесполезна, если вы не делаете что-то глупое, например, проводите время в виде пузыря большого массива целых или двойных чисел.
Если вы сделаете что-то столь же простое, как пузырьковая сортировка массива строк, гистограмма ПК покажет вам только то, что у вас есть горячая точка в процедуре сравнения строк.
Это не очень помогает, не так ли?
Я знаю, что вы бы не делали такой пузырьковой сортировки, но просто для забавы, давайте предположим, что вы сделали, и это занимало 90% вашего времени. (то есть, если вы исправите это, оно может увеличиться в 10 раз.)
На самом деле это очень легко найти, потому что если вы просто нажмете кнопку паузы в отладчике, вы почти наверняка увидите, что она останавливается в процедуре сравнения строк. Затем, если вы посмотрите на стек на один уровень, вы будете смотреть прямо на цикл пузырьковой сортировки, который является вашей ошибкой. Если вы не уверены, что действительно заметили проблему, просто остановите ее несколько раз. Количество раз, когда вы видите проблему, говорит о том, насколько она дорогостоящая.
Любая строка кода, которая появляется в стеке вызовов при кратных паузах, требует от вас исправления. Некоторые из них вы не можете, например, «call _main», но если вы можете, вы получите хорошее ускорение, гарантировано.
Затем сделайте это снова и снова.
Если у вас закончились вещи, которые вы можете исправить, то вы действительно настроили программу в считанные секунды.
Это так просто.
Вы также можете использовать профилировщик в Visual Studio. Это хороший инструмент, но имейте в виду следующие недостатки:
Путать вас с «исключительным временем», которое, если вы концентрируетесь на информации на уровне строк, почти бессмысленно.
Если ваша программа тратит время на ввод / вывод, она этого не увидит, потому что, когда она прекращает делать ввод / вывод, сэмплы останавливаются, если вы не используете инструментарий.
Но если вы используете инструментарий, вы не получите информацию на уровне линии, только на уровне функции. Это нормально, если все ваши функции маленькие.
Смущает вас «деревом вызовов». Для строки кода важно, сколько образцов стека это на. Если оно находится во многих ветвях дерева вызовов, дерево вызовов не покажет вам, сколько оно действительно стоит.
Если он говорит вам, что линия дорогая, он не может сказать вам, почему. Для этого вы хотите видеть столько информации о состоянии каждого образца, сколько вам нужно, а не просто сводки.
Трудно сказать, когда вы хотите делать сэмплы, а когда нет. Вы хотите, чтобы оно выполняло выборку, когда вы ожидаете приложение, а не когда оно ждет вас.