Чем профилирование отличается от регистрации? - PullRequest
7 голосов
/ 28 октября 2008

Чем профилирование отличается от ведения журнала?

Это просто, что профилирование используется для измерения производительности, чтобы увидеть, сколько времени занимает каждая функция? Или я выключен?

Как обычно используются библиотеки профилирования?

Какие типы статистики получаются при профилировании?

Ответы [ 8 ]

20 голосов
/ 28 октября 2008

Ведение журнала сообщает вам , что произошло . Отлично подходит для криминалистики и отладки.

Профилирование выражает это количественно: оно говорит вам, сколько времени ваш код провел в каждой области или сколько раз было выполнено тело кода. Это поможет вам улучшить производительность вашего кода.

Профилирование обычно работает на уровне строки кода, вызова функции или иногда файла. Для каждого уровня он обычно может сказать вам:

  • Сколько раз устройство было выполнено. Как правило, менее важно оптимизировать редко используемый код, чем код, который выполняется миллионы раз. Единственным исключением является код, который заставляет пользователя (или другой процесс) ждать его завершения.

  • Сколько раз была взята ветка , скажем, в выражении if или switch. Опять же, вы, как правило, больше всего заботитесь об оптимизации часто используемого кода.

  • Сколько времени было потрачено на выполнение определенной функции . Предупреждение: даже опытные разработчики часто удивляются этим результатам. Очень сложно предсказать, где находятся ваши «временные поглотители».

  • Сколько времени было потрачено на функцию и на все функции, вызываемые в этой функции . Возможно, не сама функция, а ее дочерние элементы нуждаются в оптимизации.

  • Сколько раз каждый абонент вызывал . Вы можете обнаружить, что определенная функция вызывается в основном из неожиданного места.

Вооружившись данными хорошего профилировщика, вы можете добиться значительного улучшения производительности при относительно небольших усилиях.

3 голосов
/ 28 октября 2008

Профилирование - это определение производительности в отношении вызовов функций / методов, например

  • Время, потраченное на функции
  • Время, потраченное на функции + время, потраченное на дочерние функции
  • Количество вызовов конкретной функции

Вся идея профилирования состоит в том, чтобы получить хороший обзор системы, чтобы определить, где можно провести оптимизацию. Если вы знаете, что определенная функция вызывается в 20 раз чаще, чем вторая наиболее часто вызываемая функция, вы знаете, когда следует сосредоточить усилия по оптимизации.

Он также показывает, где не , чтобы провести время. Вы не хотите тратить день на оптимизацию функции, которая вызывается только один раз в час . Вы хотите сосредоточить свое время на оптимизации тех функций, которые вызываются несколько раз в секунду .

Регистрация , в моем понимании, просто отслеживает то, что было вызвано (но без подробных метаданных, связанных с каждым вызовом).

Профилирующие библиотеки, такие как Rational Quantify, работают, инструментируя код для сбора статистики во время его работы. Это окажет неявное влияние на производительность, но будет относительным по всей системе.

2 голосов
/ 28 октября 2008

Профилирование используется для определения эффективности выполнения программы. Может использоваться для измерения использования памяти или использования процессора. Вы можете использовать его для оптимизации вашего кода.

Регистрация с другой стороны является функцией аудита. Вы хотите увидеть, что программа сделала во время работы. Он больше используется для отладки, чем для производительности.

1 голос
/ 04 ноября 2008

Предыдущие ответы верны.

Тем не менее, ИМХО, профилировщики больше курят, чем оружие, и я уверен, что из-за этого некоторые стрелки нажимаются.

Если вы хотите знать, сколько времени отвечает за функцию, вам нужно знать, сколько раз она вызывается и сколько времени она занимает, когда она вызывается. Один из них без другого бесполезен.

Даже если он говорит вам обоим обоим, он не говорит вам, какие операторы внутри функции ответственны за время. Они расскажут вам много вещей, таких как аннотированные графы вызовов и еще много чего, но это все еще в форме множества подсказок, над которыми вам нужно разобраться, чтобы ваши догадки звучали более «информированно».

Тогда они говорят о том, насколько "точны" цифры. Делает хорошую презентацию, но не решает проблему.

То, что они могли бы делать (а они не делают), это указывать на конкретные утверждения или инструкции и говорить

Это точное утверждение прямо здесь, если бы вы могли от него избавиться, сэкономили бы вам X% от общего времени выполнения.

и сортируйте их по X.

Если вам действительно нужно решить проблему с производительностью, это то, что вам нужно, и вы можете легко получить ее самостоятельно. Смотрите здесь:
Как оптимизировать производительность вашей программы

1 голос
/ 28 октября 2008

Ведение журнала расскажет вам, как много вопросов, которые вы отправили в stackoverflow.

Профилирование говорит вам, как длина требуется, чтобы опубликовать каждый вопрос, и сколько много вашего рабочего дня вы проводите здесь.

1 голос
/ 28 октября 2008

Операторы журнала обычно пишутся в самом исходном коде, тогда как profiling позволяет изменить код после , когда он скомпилирован и инструментирован тогда и только для сеанс профилирования (т. е. нет кода профилирования в любой версии самой сборки.) и измеряется производительность в режиме реального времени или может быть выборка , поэтому он может отслеживать производительность при менее гранулированный, но менее навязчивый способ.

1 голос
/ 28 октября 2008

Ведение журнала - это запись того, что было сделано с целью аудита или устранения неполадок. Я бы сказал, что профилирование - это метод измерения производительности. Профилирование можно выполнить путем регистрации показателей производительности или с помощью специализированных инструментов или утилит для проверки состояния системы во время ее работы.

1 голос
/ 28 октября 2008

Я вижу профилирование как измерение производительности, и вам не нужно профилировать каждый выполняемый фрагмент кода, иногда лучше ориентироваться на конкретные области.

В журнале хранится информация для дальнейшего использования, информация, которая может относиться к профилированию, но не обязательно. Это может быть просто для регистрации того, что произошло.

Все, что я когда-либо использовал для профилирования, позволяет вам хранить время начала и время окончания транзакции, а затем манипулировать данными, чтобы увидеть, что занимает больше всего времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...