Готовишься к экзамену?
Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.
В процедуре есть строка, которая вызывает функцию. Можно ли в «Замере производительности» получить оценку времени выполнения этой строки (и процедуры) так, чтобы в расчет не попадало время работы вызываемой функции?
Да, это так работает по умолчанию: замер учитывает только строки самой процедуры, а вызовы функций не считает
Неправильно: Замер производительности фиксирует фактическое время выполнения кода, и если строка вызывает функцию, то «полное время» обычно включает время работы этой функции. По умолчанию вы видите картину выполнения с учетом вложенных вызовов, иначе замер потерял бы смысл для поиска «тяжелых» мест.
Да, перед стартом замера можно отдельно включить/выключить учет времени всех вызываемых процедур и функций
Неправильно: Перед запуском замера вы управляете самим фактом записи (когда начать/закончить, какие действия выполнить), но не задаете режим «считать/не считать вложенные вызовы» как настройку самого замера. Разделение на «полное» и «собственное» время делается при анализе результатов.
Нет, время вызываемой функции всегда будет входить в результат, исключить его нельзя
Неправильно: В отчете замера производительности обычно можно переключаться между показом времени с учетом вложенных вызовов и без учета вложенных вызовов (собственное время). Это как раз и позволяет увидеть, сколько «съедает» сама строка/процедура без дочерних вызовов.
Да, это делается уже при просмотре отчета: можно показать время без учета вложенных вызовов (собственное время)
Правильно: В отчете замера производительности можно переключить представление показателей и анализировать «собственное время» метода/строки, то есть время выполнения кода без времени, потраченного во вложенных вызовах. Таким образом вы отдельно видите: что «тяжелое» внутри самой процедуры, а что уходит в вызванные функции.
Пояснение
Замер производительности в 1С собирает данные о выполнении кода (по процедурам/функциям и часто по строкам) и строит отчет, где удобно искать узкие места. Когда строка вызывает функцию, логично, что «полное время» этой строки/процедуры включает и время работы функции, потому что именно столько реально занял участок выполнения.
Но для анализа важно разделять два показателя:
- Полное время (с учетом вложенных вызовов): показывает, сколько занял участок «в целом» вместе со всеми вызванными методами.
- Собственное время (без учета вложенных вызовов): показывает, сколько занял только код самой строки/процедуры, если вычесть время дочерних вызовов.
Именно поэтому нужный режим достигается не «настройкой перед стартом замера», а переключением в отчете. По сути вы сначала измеряете все как выполнялось реально, а потом выбираете, какой разрез смотреть.
Практический пример:
- В процедуре есть строка: Результат = РассчитатьЧтоТо(Параметры);
- Полное время строки большое (например, 2000 мс) - потому что «внутри» долго работает РассчитатьЧтоТо.
- Собственное время этой строки маленькое (например, 1-2 мс) - значит сама строка почти ничего не делает, а проблема в вызываемой функции.
Полезные рекомендации по замеру:
1) Если вы не хотите включать в измерение запуск и прогрев системы, сначала запустите «1С:Предприятие», дойдите до нужного состояния (открыты формы, заполнены параметры), затем включите замер и выполните только целевой сценарий.
2) Выполняйте сценарий несколько раз и сравнивайте результаты: первый прогон может быть медленнее из-за кэша и начальной инициализации.
3) При анализе смотрите сначала «полное время» (где основная нагрузка), а затем переключайтесь на «собственное время», чтобы понять, что именно замедляет участок: сам код или вложенные вызовы.