Часто в процессе разработки возникает ситуация, когда необходимо проанализировать быстродействие программного кода, но стандартный инструмент «Замер производительности» в конфигураторе упорно не показывает данные для внешних обработок. Рассмотрим, как правильно настроить окружение и что предпринять, чтобы замер начал корректно фиксировать выполнение процедур и функций.
Прежде всего, давайте вспомним стандартную методику работы с замером. Чтобы получить корректные данные, необходимо соблюдать строгую последовательность действий:
Если вы работаете с внешней обработкой, убедитесь, что вы открыли её именно в том сеансе, который подключен к отладчику. Если обработка открыта через «Файл -> Открыть», платформа создает временный идентификатор объекта, и иногда отладчику требуется время или повторный запуск сеанса, чтобы корректно «подцепить» этот модуль к списку отслеживаемых объектов.
Если после выполнения шагов выше данные в окне замера всё еще отсутствуют, проанализируем возможные причины:
/debug в строке запуска сервера 1С сделает невозможным любой замер серверных вызовов.Для того чтобы замер производительности выдавал чистые и понятные результаты, придерживайтесь следующих рекомендаций:
1. Очистка предыдущих результатов
Перед каждым новым тестом обязательно нажимайте кнопку «Очистить» в окне замера. Это исключает «зашумление» данных результатами предыдущих запусков программы, которые могли происходить в фоновом режиме.
2. Изоляция функционала
Если обработка выполняет большой объем работы, постарайтесь замерять только конкретный участок кода. Например, если у вас есть процедура СоздатьДокументыПоФайлу(), попробуйте вызвать именно её отдельно, чтобы в отчет замера не попадали лишние операции по открытию форм или инициализации интерфейса.
3. Сортировка по времени
После получения результатов в конфигураторе воспользуйтесь колонкой «Время». Отсортируйте строки по убыванию времени выполнения. Это поможет вам мгновенно увидеть так называемые «узкие места» — строки кода, в которых выполнение занимает больше всего времени (например, длительные запросы к базе данных или сложные циклы обработки ТЧ).
Пример структуры кода, который чаще всего подвергается анализу:
Процедура СоздатьДокументыПоФайлу(ДанныеФайла)
// Инициализация
Запрос = Новый Запрос;
Запрос.Текст = "...";
Результат = Запрос.Выполнить();
// Обработка данных
Для Каждого Строка Из ДанныеФайла Цикл
Док = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
// Заполнение ТЧ
// ...
Док.Записать();
КонецЦикла;
КонецПроцедуры
Если вы видите, что время распределено неравномерно, обратите внимание на методы, связанные с записью объектов или выполнением запросов. В приведенном выше примере, если замер покажет, что львиная доля времени уходит на метод Док.Записать(), значит, проблема кроется в большом количестве записей в транзакции или влиянии подписок на события.
Если проблема сохраняется и после всех манипуляций, попробуйте выполнить «жесткую» очистку кэша 1С. Удалите папки с временными файлами из профиля пользователя. Часто после этого платформа пересоздает временные объекты, и связь с отладчиком восстанавливается. Также убедитесь, что версия платформы (например, 8.3.18) не содержит известных ошибок, связанных с отладкой, и при возможности протестируйте замер на более актуальном релизе 1С:Предприятие.
Помните: «само заработало» — это стандартное поведение платформы при сбросе кэша или переустановке сеанса. Если вы столкнулись с подобной ситуацией, просто продолжайте планомерную работу, используя инструменты отладки грамотно и последовательно.