Разработка и Конфигурация · 10 мин
Чистое время в замере производительности 1С: в чем измеряется и как его анализировать
Разбираем колонку «Время чистое» в замере производительности 1С: в чем измеряется, чем отличается от общего времени, как читать результаты и искать узкие места.
Инструмент «Замер производительности» в конфигураторе 1С показывает, сколько времени заняло выполнение каждой строки кода или вызова процедуры. Одна из ключевых колонок результата — «Время (чистое)», и именно она чаще всего вызывает вопросы: в каких единицах представлены значения и чем чистое время отличается от обычного.
Короткий ответ: время в замере производительности 1С измеряется в секундах с дробной частью (точность — до миллисекунд и ниже, в зависимости от версии платформы). Значение «1,5» означает полторы секунды, «0,003» — три миллисекунды. Чистое время — это время выполнения самой строки или метода без учета времени вложенных вызовов.
Понимание разницы между общим и чистым временем — основа анализа производительности. Без этого легко ошибочно «обвинить» в медленной работе процедуру-контейнер, которая сама по себе почти ничего не делает, а лишь вызывает другие методы.
Как включить замер производительности в конфигураторе
Замер запускается из конфигуратора при подключенном отладочном сеансе. Откройте конфигуратор, подключитесь к информационной базе в режиме отладки (меню «Отладка» → «Начать отладку» или подключение к уже запущенному сеансу), затем выполните в пользовательском режиме операцию, которую нужно измерить.
Сам замер включается через меню «Отладка» → «Замер производительности» (или сочетание клавиш, которое зависит от версии платформы). Повторное включение того же пункта останавливает замер и открывает окно результатов. Важно: замер нужно включить до начала выполнения интересующей операции и выключить сразу после её завершения, чтобы в отчет не попал лишний код.
- 1Запустите отладку в конфигураторе или подключитесь к активному сеансу
- 2Включите замер: Отладка → Замер производительности
- 3Выполните в режиме 1С:Предприятие операцию, которую нужно измерить
- 4Остановите замер тем же пунктом меню — откроется окно результатов
- 5Отсортируйте строки по колонке «Время (чистое)» для поиска узких мест
В каких единицах измеряется время в замере
Значения в колонках «Время» и «Время (чистое)» указываются в секундах. Дробная часть показывает миллисекунды и микросекунды: значение 0,250 — это четверть секунды (250 мс), значение 0,001 — одна миллисекунда. Отдельного переключателя единиц измерения в окне результатов нет — всё всегда в секундах.
Рядом с временем обычно отображается процент — доля данной строки в общем времени замера. Процент удобен для быстрой оценки: если одна строка занимает 70% времени, оптимизировать нужно в первую очередь её, а не десяток строк по 1–2%.
Чем чистое время отличается от общего
Колонка «Время» (общее) показывает полное время выполнения строки или метода, включая все вложенные вызовы: если процедура А вызывает процедуру Б, то в общее время процедуры А входит и время работы Б. Поэтому у «верхних» процедур в стеке вызовов общее время всегда большое.
Чистое время — это время, потраченное непосредственно на исполнение самой строки или тела метода, за вычетом времени всех вызванных из неё методов. Именно чистое время показывает, где реально «сгорают» секунды: в конкретном запросе, обращении к СУБД, цикле или вызове COM-объекта.
Практическое правило: для поиска узких мест сортируйте результат по чистому времени, а не по общему. Общее время полезно только для оценки вклада целых веток вызовов — например, чтобы понять, какая из двух крупных операций в обработке занимает больше времени в целом.
Общее и чистое время
Включает вложенные вызовы. Подходит для оценки вклада целых процедур и веток логики, но не показывает конкретную медленную строку.
Только собственное время строки или метода без вложенных вызовов. Основной показатель для поиска узких мест и точечной оптимизации.
Как читать результаты замера на практике
Окно результатов представляет собой дерево или плоский список вызовов с колонками: имя метода, количество вызовов, время, чистое время, проценты. Начинайте анализ с сортировки по чистому времени по убыванию — верхние строки и есть кандидаты на оптимизацию.
Обращайте внимание на сочетание «количество вызовов × время». Строка с чистым временем 0,01 секунды, вызванная 10 000 раз, даст суммарный вклад в 100 секунд — это типичный признак запроса или обращения к данным внутри цикла. Одиночный вызов длительностью 0,5 секунды может оказаться менее критичным, чем тысячи мелких.
Также учитывайте, что в замер попадает и клиентская, и серверная часть кода. Вызовы сервера с клиента, обращения к СУБД и выполнение запросов отражаются в строках соответствующих методов — по чистому времени видно, где именно зависает выполнение.
Проверьте, что делает строка: запрос, обращение к СУБД, COM, файловая операция
Ищите запросы или обращения к базе внутри цикла — кандидат на вынос за пределы цикла
Раскройте дерево вызовов и смотрите чистое время вложенных методов
Типичные узкие места, которые видны по чистому времени
Чаще всего лидерами по чистому времени оказываются: выполнение запросов (метод Выполнить() объекта запроса), обращения к объектам базы данных через точку (неявные запросы), вызовы серверных процедур с клиента, работа с файлами и внешними компонентами.
Отдельный класс проблем — неявные запросы при обращении к реквизитам объекта через точку внутри цикла. Каждое такое обращение порождает запрос к СУБД, и в замере это видно как масса строк с небольшим чистым временем, но огромным количеством вызовов. Решение — получить все данные одним запросом и работать с выборкой.
Ограничения и погрешности замера
Замер производительности сам по себе влияет на скорость выполнения: включенный режим отладки и сбор статистики добавляют накладные расходы. Поэтому абсолютные значения в замере обычно выше реального времени работы без отладки. Замер показывает относительную картину — где время тратится больше, — а не точный хронометраж продуктивной работы.
Для оценки реального времени операции без искажений используйте другие подходы: программный замер через функцию ТекущаяУниверсальнаяДатаВМиллисекундах() до и после участка кода, технологический журнал с событием DBMSSQL для анализа запросов к СУБД, либо типовую обработку «Оценка производительности» из состава БСП, если она внедрена в конфигурацию.
НачалоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
// ... измеряемый код ...
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
Сообщить("Выполнено за " + Длительность + " мс");Частые ошибки при анализе замера
Первая ошибка — оптимизация по общему времени вместо чистого. Разработчик видит большое значение у процедуры верхнего уровня и начинает переписывать её, хотя реальная проблема — во вложенном запросе. Вторая ошибка — игнорирование количества вызовов: оптимизируется одиночная строка на 0,3 секунды, тогда как цикл из тысяч мелких обращений дает суммарно минуты.
Третья ошибка — выводы по одному замеру. Время выполнения зависит от кэша СУБД, загрузки сервера, объема данных. Делайте несколько замеров одной и той же операции и сравнивайте картину: стабильно повторяющиеся «горячие» строки — достоверные узкие места, разовые всплески могут быть следствием внешних факторов.
Как проверить результат оптимизации
После внесения изменений повторите замер в тех же условиях: та же операция, тот же объем данных, тот же сеанс отладки. Сравните чистое время оптимизированных строк и общее время операции целиком. Корректный признак успеха — снижение и чистого времени целевых строк, и суммарной длительности операции.
Дополнительно проверьте функциональную корректность: оптимизация запросов и циклов не должна менять результат обработки. Прогоните операцию на контрольных данных и сверьте итоги с эталоном, полученным до изменений.
Как проверить результат
Заметно снизилось по сравнению с исходным замером
Не изменилось или выросло — оптимизация не сработала
Итоговые данные совпадают с эталоном до изменений
Расхождения в данных — откатите изменения и ищите ошибку
Несколько повторных замеров показывают схожую картину
Результаты сильно скачут — влияют внешние факторы, нужны повторные измерения
Что важно запомнить
Время в замере производительности 1С измеряется в секундах с дробной частью. Чистое время — время самой строки без вложенных вызовов, и именно по нему ищут узкие места. Сортируйте по чистому времени, учитывайте количество вызовов и делайте несколько замеров для достоверных выводов.
Частые вопросы о замере производительности
В чем измеряется время в замере производительности 1С?
В секундах с дробной частью. Значение 0,015 означает 15 миллисекунд, значение 2,5 — две с половиной секунды. Отдельных миллисекундных единиц в окне результатов нет.
Почему сумма чистого времени всех строк не равна общему времени операции?
Потому что в общее время входят накладные расходы на вызовы методов, передачу управления между клиентом и сервером, а часть времени может относиться к системным операциям платформы, которые не отображаются отдельными строками.
Можно ли сделать замер без конфигуратора?
Штатный замер производительности доступен только в конфигураторе в режиме отладки. Без него используйте программный замер через ТекущаяУниверсальнаяДатаВМиллисекундах(), технологический журнал или механизм оценки производительности БСП.
Почему время в замере больше, чем реальное время работы операции?
Режим отладки и сбор статистики замедляют выполнение кода. Замер показывает относительное распределение времени между строками, а не точный хронометраж продуктивной работы.
Что делать, если лидер по чистому времени — строка выполнения запроса?
Анализируйте сам запрос: получите его текст и план выполнения (через технологический журнал или консоль запросов), проверьте наличие подходящих индексов, соединения таблиц и условия. Часто помогает переписывание запроса или добавление индекса.
Сколько раз нужно повторять замер для достоверного результата?
Минимум 2–3 раза в сопоставимых условиях. Если картина по «горячим» строкам стабильно повторяется, выводы можно считать достоверными. Разовые всплески времени часто связаны с кэшем СУБД или фоновой нагрузкой сервера.