Замер производительности
Режим замера производительности позволяет разработчику оценивать скорость работы как всей конфигурации в целом, так и отдельной ее части. В этом режиме измеряется частота использования конкретных участков кода и скорость их выполнения.
Подобный анализ помогает выбирать наиболее оптимальный способ программной реализации алгоритмов работы системы, а также определять пути для повышения быстродействия прикладного решения.
Результат замера производительности представляет собой список ссылок на конкретные строки модуля, с указанием частоты их выполнения и длительности (абсолютного времени выполнения и относительного, в процентах от общего времени выполнения замеряемого участка). Также в списке отмечаются строки кода, исполнявшиеся на клиенте, сервере и строки кода, приводящие к вызову сервера:
Результаты замера можно видеть также непосредственно в окне с исходным текстом модуля. Щелчком мыши на выбранной строке списка можно перейти к тексту модуля, для которого на отдельном поле будет отображено количество вызовов и относительное время выполнения каждой строки:
Результаты замера могут быть отобраны по месту исполнения (клиент, сервер, клиент и сервер), а также отсортированы по любой из колонок, например, по количеству вызовов строки:
Кроме этого, режим замера производительности позволяет производить выборочное суммирование строк замера, для получения суммарных характеристик выполнения некоторых строк:
Дополнительной возможностью является включение в замер или исключение из замера времени выполнения вызываемых процедур и функций. Использование этой возможности позволяет получать картину замера, максимально приближенную к реальной, в случае, когда из замеряемого модуля вызываются внешние по отношению к нему, процедуры.
Разработчик может сохранить результаты замера в файл для последующего анализа и сравнения с результатами других замеров.
Оценка производительности работы кода
В этой статье мы научимся делать замеры производительности работы 1С: Предприятия. Оценку производительности можно выполнять как в целом для всего приложения, начиная с момента его запуска и заканчивая закрытием, так и отдельного куска кода, если Вы хотите замерить одно какое-то узкое место. Все примеры по замерам производительности я буду показывать на демонстрационной конфигурации «Управляемое приложение 1С».
Научимся делать замер производительности всего приложения в целом от начала работы, до конца. Для этого необходимо запустить 1С: Предприятие в режиме конфигуратор, и в меню Отладка выбрать пункт «Замер производительности»
После этого выйдет сообщение о том, что нужно включить замер производительности, который начнется сразу после отладки
Соглашаемся, запускаем отладку (клавиша F5) и работаем. Конфигуратор 1С в это время должен быть включен!
Подробно о работе с отладкой читайте в этой статье:
Отладка в конфигураторе 1С
После того как Вы все сделаете и закроете 1С: Предприятие в пользовательском режиме, то откроется окно замера производительности.
С этим окном мы разберемся позже.
Но самое интересное, что замер продолжает работать, мы убедимся в этом если опять зайдем в отладку
Что бы его снять, нужно опять нажать на этот пункт меню.
Узнаем, как делать замер производительности в конкретном месте кода. Для этого откроем модуль документа «Поступление Денег» и установим точки останова в начале процедуры проведения и в конце.
После этого запустим отладку и попытаемся провести документ Оплата, а когда первая точка останова сработает, перейдем в меню «Отладка», где нажимаем уже знакомую нам кнопку «Замер производительности»
После того как запустили замер производительности, нужно продолжить отладку с помощью соответствующей кнопки или клавиши F5. Как сработает вторая точка останова, вернемся в меню отладка и заново нажмем на кнопку «Замер производительности»
После этого откроется окно результатов замера, и форма в конфигураторе 1С приобретет следующий вид.
Разберемся с этим окном, для большей наглядности сделаем замер производительности для обработки замены товара в табличной части документа «Приход товара»
Смотрите на последний рисунок, как видно, строк в таблице замера больше, чем строк в самом обработчике, который мы замеряли. Это потому что в таблицу замеров входят не только строки выделенного фрагмента кода, но и строки процедур и функций, которые в этом коде вызываются. В нашем случае это две функции ПолучитьТекущуюСтрокуТовары и ПолучитьЦенуТовар.
Строки 16,17, 20, 22 относятся к функции ПолучитьЦенуТовара, а строки 33,34 – ПолучитьТекущуюСтрокуТовары. Если мы кликнем по нужной строке мышкой, то перейдем на эту строку в модуле.
Разберем некоторые колонки:
«Кол» — в этой колонке указано сколько раз выполнялась данная строка
«Время чистое» — время в секундах, которое было потрачено на выполнение данной строки, в данном случае берется суммарное время, т.е. все время, когда строка вызывалась.
«% времени» — отношение «Время чистое» к общему времени выполнения замера. Причем за 100% принимается выполнение кода на клиент. Т.е. корректно эта колонка работает когда мы начали на клиенте и закончили на клиенте, а если мы начали на сервере, а закончили на клиенте, то результат может быть не всегда корректен.
На отображение в колонках «Время чистое» и «% времени» влияет флаг «Для вызова процедур и функций включать время выполнения». Этот флаг нужно включать, когда мы хотим показать время на вызов процедуры или функции.
После того как мы установили этот флаг, поменялись значения в колонках «Время» и «% времени». Т.е. мы увидели, сколько относительного и абсолютного времени в целом тратиться на эту строку
Стр.Цена = ПолучитьЦенуТовара(Объект.Дата, Стр.Товар);
Разберемся, откуда взялась цифра 98,64% – время выполнения этой строки.
Если сложить проценты времени на выполнение кода в процедуре ПолучитьЦенуТовара, а это строки 16, 17, 20 и 22, будет — 86,41 %, но на рисунке мы видим, что исполнение процедуры занимает 98,64 % общего времени. Где еще 98,64 – 86,41 = 12,23 процента? Посмотрите на предыдущий рисунок, 12.23% — это именно время на вызов серверной процедуры.
Таким образом, если установлен флаг «Для вызова процедур и функций включать время выполнения» то показывает относительное и абсолютное время выполнения и вызова процедуры или функции. В тоже время если этот флаг снят, то показывается время только на вызов метода. Поскольку вызов любой серверной процедуры или функции (без разницы в контексте она формы, или внеконтекстная) требует определенных затрат, то информации о продолжительности вызова метода может быть очень полезной.
С остальными колонками все более менее понятно. Колонка «Клиент» при помощи специальной пиктограммы указывает, что строка выполняется на клиенте. А колонка «Сервер» указывает, что строка выполняется на сервере. Колонка «Обр. сервер» указывает, что в данной строке происходит передача управления на сервер.
Так же имейте ввиду, что часть информации из таблицы замеров дублируется в модуле. Цифры процентов в этом случае идентичны цифрам, когда флаг «Для вызова процедур и функций включать время выполнения» снят.
И на последок отмечу, когда будите делать замеры тех или иных процессов, имейте ввиду что скорость выполнения зависит от многих факторов (загруженность процессора, оперативной памяти). Поэтому желательно делать несколько разных замеров, что бы вычислить среднюю величину и исключить случайные скачки.
Пять эффективных инструмента отладки
Я стараюсь как можно чаще выпускать различные интересные бесплатные статьи и видеоуроки. Поэтому буду очень рад, если Вы поддержите мой проект перечислив любую сумму:
Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Замер производительности в 1С
В платформе есть множество удобных инструментов, повышающих эффективность работы разработчика прикладных решений 1С. Один из таких инструментов – «Замер производительности». Грамотный разработчик понимает, насколько важна производительность 1С, ценность быстрой работы разрабатываемых им решений. И конечно же, он должен уметь выявлять и быстро находить проблемные места в коде.
Основная функция инструмента понятна из названия – «замер производительности» исполняемого кода. С помощью отладчика запускается исполняемый код и формируется таблица результатов замера, с которой можно удобно оперировать полученными результатами — переходить в нужные места кода, сортировать по количеству и времени исполнения и находить самые проблемные строки.
Еще одна полезная «фишка». Замер производительности крайне прост в использовании и удобен как для своей основной функции, так и для поиска вызываемых мест кода. Например, иногда бывает сложно найти, в каком именно месте проходит проверка на ошибку, или нужно найти места вызова какой-то процедуры. Для этого можно запустить замер, собрать стек вызовов всего исполняемого кода и поиском найти нужную строку коду.
Например, появилось вот такое непонятное сообщение, но сходу не удалось найти место кода и понять причина отказа. Можно запустить замер и по таблице замера найти исполняемое место. Это намного быстрее, чем искать по всей конфигурации.
Как запускать замеры?
Шаг 1. Запустить базу 1С в режиме отладки. Запускаем базу в режиме конфигуратора, нажимаем «F5» (или кнопку «Начать отладку») и запускаем пользовательский режим для отладки.
Также можно подключать отладку уже запущенных сеансов. И даже подключаться к фоновым заданиям или сервисам.
Для клиент-серверных приложений важно, чтобы была включена отладка на сервере, чтобы можно было собирать и серверные вызовы тоже.
Шаг 2. Открыть нужное место в системе для запуска исполняемой команды. Не нужно включать отладку до момента запуска команды, иначе в стек замера попадут ненужные строки.
Шаг 3. Нажать кнопку замера производительности. Кнопка появляется при включении отладки.
Шаг 4. Выполнить команду и дождаться завершения. После отжать кнопку замера и получить таблицу результатов замера.
Шаг 5. 1С оценка производительности и устранение проблемных мест.
Хотелось бы рекомендовать разработчикам делать тест производительности 1С, своих (да и чужих) решений не откладывая до времени, когда это станет проблемой пользователей. Собрать замеры и просмотреть результат не так уж и долго, а вот эффект может оказаться крайне положительным.
Пример анализа производительности
Имеем обработку (условно), которая выводит простую таблицу с суммой движений по 60 счету по документам поступления товаров и услуг.
Когда ее разработали, документов у компании формировалось немного и особо не заморачивались с кодом. Программист на скорую руку набросал бухгалтеру такую обработку и забыл про нее. Но вот прошло несколько лет и документов стало по несколько тысяч в месяц и теперь бухгалтер жалуется, что скорость работы 1С оставляет желать лучшего. На компьютере бухгалтера «крутится» по несколько минут.
Запускаем замер производительности и сразу видно проблему – запрос в цикле.
Для выявления проблемных мест достаточно отсортировать результат по времени выполнения или проценту от общего времени выполнения.
Стоит отметить, что количество вызовов кода иногда тоже является проблемой, и нужно поработать в сторону уменьшения итераций цикла. Например, сделать нужный отбор в запросе до начала обработки результата. Это может усложнить запрос, зато ускорит работу команды.
Нижние итоги показывают сумму показателя по выделенной строке. Поэтому если нужно увидеть общее время работы команды, достаточно выделить все строки (Ctrl+A).
Проблему нашли и понятно, что с ней делать. Переносим запрос в цикле в один собирательный запрос и выводим его результат в таблицу.
Снова делаем замер и вот результат:
Проблема решена, обработка отработала практически моментально.
Конечно, этот пример условный, но он показывает, как легко и быстро с помощью этого инструмента можно находить ошибки в разработке.
Часто бывает, что кода в исполняемой команде много, и неясно, в каком именно месте можно оптимизировать решение. Именно для поиска таких мест и нужен «Замер производительности 1С».
Особенность замера производительности в управляемых формах
В клиент-серверном варианте работы информационной базы, замер производительности собирает клиентские и серверные вызовы в одну таблицу. Понять место вызова можно по колонкам «Клиент» и «Сервер».
Если отладка на сервере выключена, то будут собраны и показаны только клиентские вызовы. Также можно отфильтровать отображение вызовов через флажки «Клиент» и «Сервер».
А вот так будет выглядеть стек замера в обычном режиме (нет разделения на «Клиент» и «Сервер»):
Время работы программного кода
Для оптимизации работы программного кода необходимо знать время выполнения до и после оптимизации. Время работы программного кода можно измерить с помощью встроенной опции в конфигураторе 1С, которая называется "Замер производительности". Данная опция позволяет измерять время выполнения строк программного кода. Для замера времени выполнения фрагментов кода, нужно поставить две точки останова, в начале и в конце замеряемого блока. Спозиционироваться на первую точку останова и включить замер производительности. Затем перейти к последней точке останова и выключить замер производительности.
Замер производительности включается в конфигураторе в главном меню: Отладка->Замер производительности.
Замер может быть отключен в любой момент: при переходе по точкам останова или после отладки. После отключения замера производительности появится отчет. В данном отчете можно посмотреть модуль в котором выполнялся код, номер строки, программный код, время выполнения, количество раз выполнения фрагмета кода, процент затраченного времени от общего времени.
Комментарии (0)
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться