Я написал 2 версии моей программы, которая является эволюционным алгоритмом в C ++. Первая версия процедурная, работает отлично и очень быстро. Вторая версия полностью ООП, и программа находит результаты, но очень очень медленно (например, в 10 раз медленнее, чем первая версия). Есть ли способ измерить время сегментов кода внутри циклов или что-то в этом роде? Любой совет или идея помогут.
Заранее спасибо.
Используйте профилировщик. Какой из них лучше, зависит от платформы / операционной среды; например с g ++ вы можете использовать gprof, или, если вы не хотите перекомпилировать, вы можете использовать oprofile, предполагая Linux. На Solaris вы можете использовать dtrace. На других платформах, таких как Windows или Mac, добавьте тег для вашей платформы к вопросу …
Тебе необходимо профайлер чтобы найти проблемы с производительностью в вашей программе.
В зависимости от редакции Visual Studio у вас есть различные уровни поддержки профилирования в вашей Visual Studio. Если вам повезло оказаться в Visual Studio Ultimate или Premium Edition, у вас очень хорошая встроенная поддержка профилирования
Если вы используете Visual Studio Express или Visual Studio Professional, к сожалению, в Visual Studio нет встроенной поддержки профилирования, но вы можете использовать, например, информация по этой ссылке как сделать это вручную бесплатно с этими изданиями в любом случае.
Используйте профилировщик. Если вы компилируете с помощью gcc, посмотрите, например, gprof.
Для вашего конкретного случая я предлагаю скачать и использовать этот инструмент: http://www.codersnotes.com/sleepy/
Это очень простой (но эффективный) профилировщик выборки.
Просто запустите ваше приложение с помощью Ctrl + F5 (выпуск) в Visual Studio, запустите эту программу (Very Sleepy), дважды щелкните по имени исполняемого файла, подождите, и вы увидите подробный отчет с именами функций.
Для следующего уровня, если необходимо, используйте VTune.
Вы можете использовать \callcap
флаг компилятора в VS. Вы можете прочитать об этом Вот.
В основном вы можете добавить этот флаг только для .cpp
файл, который вы хотите проанализировать, определить функции входа / выхода, пересобрать приложение и запустить его. Я предлагаю вам разбить код, который вы пытаетесь проанализировать (и подозреваете, что он медленный), на функции, и тогда вы сможете увидеть, какой фрагмент кода занимает больше времени для выполнения.
Это немного больше работы по сравнению с уже доступным профилировщиком, но стоит попробовать.