Существуют ли какие-либо инструменты, позволяющие получить какую-то гистограмму, показывающую, на что тратится большая часть времени выполнения программы?
Это для проекта с использованием C ++ в Visual Studio 2008.
Существуют ли какие-либо инструменты, позволяющие получить какую-то гистограмму, показывающую, на что тратится большая часть времени выполнения программы?
Это для проекта с использованием C ++ в Visual Studio 2008.
Вам нужно имя профилировщик. Попробуйте Найдите узкие места в приложении с помощью Visual Studio Profiler
Вам нужен профилировщик.
Visual Studio Team edition включает профилировщик (это то, что вы ищете), но у вас может быть доступ только к выпускам Professional или Express. Взгляните на эти темы для поиска альтернатив:
Какой ваш любимый инструмент профилирования (для C ++) Какие хорошие профилировщики для встроенного C ++ в Windows?
Вам действительно не следует оптимизировать ЛЮБЫЕ части вашего приложения, пока вы не измерили, сколько времени они занимают для запуска. В противном случае вы можете направить усилия не в то место и сделать положение хуже, а не лучше.
Я использовал профилировщик под названием «AQ Time», который дает все детали, которые вы хотите знать о производительности вашего кода. Но это не бесплатно ..
Вы можете получить гистограмму программного счетчика, но это практически бесполезно, если вы не делаете что-то глупое, например, проводите время в виде пузыря, представляющего собой большой массив целых или двойных чисел.
Если вы сделаете что-то столь же простое, как пузырьковая разновидность массива строк, гистограмма ПК сообщит вам только о том, что у вас есть горячая точка в подпрограмме сравнения строк. Это не очень помогает, не так ли?
Я знаю, что вы не стали бы делать такую сортировку пузырей, но просто для удовольствия, допустим, вы это сделали, и это отнимало 90% вашего времени. (то есть, если вы исправите это, он может работать в 10 раз быстрее.)
На самом деле это очень легко найти, потому что, если вы просто нажмете кнопку паузы в отладчике, вы почти наверняка увидите, что он останавливается в подпрограмме сравнения строк. Затем, если вы посмотрите на стек на один уровень, вы будете смотреть прямо на цикл пузырьковой сортировки, который является вашей ошибкой. Если вы не уверены, что действительно заметили проблему, просто приостановите ее несколько раз. Количество раз, когда вы видите проблему, говорит о том, насколько она дорогостоящая.
Любая строка кода, которая появляется в стеке вызовов при нескольких паузах, требует от вас ее исправить. Некоторые вы не можете, например "call _main", но если сможете, то гарантированно получите хорошее ускорение.
Затем сделайте это снова и снова.
Когда у вас заканчиваются вещи, которые можно исправить, значит, вы действительно настроили программу за считанные секунды ее жизни.
Это так просто.
Вы также можете использовать профилировщик в Visual Studio. Это хороший инструмент, но имейте в виду следующие недостатки:
Запутывать вас словом «исключительное время», которое, если вы концентрируетесь на информации линейного уровня, почти бессмысленно.
Если ваша программа тратит время на ввод-вывод, она этого не увидит, потому что, когда она останавливается для ввода-вывода, сэмплы останавливаются, если вы не используете инструментарий.
Но если вы используете инструментарий, вы не получите информацию на уровне строк, только на уровне функций. Ничего страшного, если у вас все маленькие функции.
Смущаю вас с "деревом звонков". Для строки кода важно то, на скольких образцах стека она находится. Если он находится во многих ветвях дерева вызовов, дерево вызовов не покажет вам, сколько это на самом деле стоит.
Если он сообщает вам, что линия стоит дорого, он не может сказать вам, почему. Для этого вы хотите видеть столько информации о состоянии по каждому образцу, сколько вам нужно, а не просто сводки.
Трудно сказать, когда вы хотите делать сэмплы, а когда нет. Вы хотите, чтобы он пробовал, когда вы ждете приложение, а не когда оно ждет вас.
Итак, теперь, когда вы знаете, что вам нужен профилировщик, возможно, у вас нет Visual Studio, поэтому Очень сонный Может помочь.