В процессе работы с тяжелыми конфигурациями, такими как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, разработчики и администраторы часто сталкиваются с нетипичной проблемой производительности. При замере времени открытия формы выясняется, что процедура ПриСозданииНаСервере завершается быстро, однако перед началом выполнения клиентской процедуры ПриОткрытии проходит пауза в 5–9 секунд (а иногда и до 30 секунд). При этом стандартный штатный замер производительности в конфигураторе эту задержку не фиксирует, так как пауза происходит во внутренних процессах платформы 1С.
Рассмотрим подробно, какие механизмы платформы работают на этом участке, проанализируем основные причины провисания производительности и изучим проверенные способы устранения данной проблемы.
Выясним, что именно делает платформа 1С на отрезке времени между завершением выполнения обработчика ПриСозданииНаСервере и началом исполнения ПриОткрытии. После завершения серверного события платформа выполняет следующие скрытые операции:
rphost.exe к процессу тонкого клиента 1cv8.exe. На терминальном сервере передача идет через локальный стек протокола TCP/IP (Loopback).Проанализируем работу кэширования управляемых форм. Для ускорения работы тонкий клиент 1С сохраняет кэш структуры форм во временных каталогах пользователя. При частых обновлениях конфигурации или доработках в конфигураторе старые экземпляры форм могут накапливаться в локальном кэше, приводя к разрастанию каталогов до гигабайтных размеров и существенному замедлению открытия форм.
Посмотрим, как правильно очистить кэш для решения проблемы:
%AppData%\1C\1cv8
%LocalAppData%\1C\1cv8
%LocalAppData%\Temp\1C
/ClearCache в строке подключения базы.На практике часто встречается ситуация, когда у одного пользователя форма открывается за 1 секунду, а у другого в той же терминальной сессии открытие занимает 8–10 секунд. В этом случае причина кроется в накоплении большого массива персональных настроек или повреждении системного хранилища настроек формы.
Разберем по шагам, как диагностировать и устранить эту проблему:
Поскольку разработчик не может напрямую управлять алгоритмом передачи контекста платформой, необходимо минимизировать объем данных, помещаемых в реквизиты формы. Чем тяжелее реквизиты, тем дольше происходит их сериализация и передача с сервера на клиент.
Посмотрим на рекомендации по оптимизации кода управляемой формы:
// На сервере
АдресХранилища = ПоместитьВоВременноеХранилище(ТяжелыеДанные, УникальныйИдентификатор);
// На клиенте в ПриОткрытии или по требованию
Данные = ПолучитьИзВременногоХранилища(АдресХранилища);
Даже при работе пользователей в терминальном режиме (RDP) на одном сервере с сервером 1С, клиентский процесс 1cv8.exe связывается с рабочим процессом rphost.exe через локальный сетевой сокет (Loopback, 127.0.0.1). Если на сервере установлен антивирус или фаервол, перехватывающий локальный TCP/IP-трафик, проверка сериализованных пакетов контекста 1С может вызывать паузы в несколько секунд.
Для предотвращения этих задержек выполним следующие настройки:
1cv8.exe, 1cv8c.exe и rphost.exe в список исключений сканера реального времени антивируса.Подводя итоги: для устранения паузы между ПриСозданииНаСервере и ПриОткрытии следует действовать комплексно. В первую очередь необходимо произвести очистку локального кэша и сброс настроек формы для проблемных пользователей. Затем провести ревизию состава реквизитов формы на предмет передачи избыточного контекста и проверить исключения сетевого экрана на сервере.