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

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

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

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

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

8 ответов


ведение журнала говорит вам что случилось. Это отлично подходит для криминалистики и отладки.

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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


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

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

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


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


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


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

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


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

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

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

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

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

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

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

и отсортировать их по X.

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