При длительной непрерывной работе в терминальном сеансе (RDP) пользователи рабочего места кассира (РМК) или операторы часто сталкиваются с ситуацией, когда простые операции — сканирование штрихкода, подбор из пречека, считывание дисконтной карты, редактирование количества — начинают выполняться с нарастающей задержкой. Спустя 1–2 часа интерфейс начинает откликаться рывками, а потребление оперативной памяти процессом 1cv8.exe непрерывно растет. После перезапуска сеанса 1С скорость восстанавливается, но затем цикл повторяется.
Разберем основные причины такого поведения и пошаговый алгоритм локализации проблемы на обычных формах (в конфигурациях уровня КА 1.1, УПП 1.3, УТ 10.3).
Первым делом выясним, на каком именно уровне происходит задержка: в коде конфигурации, при обращении к внешним библиотекам или при отрисовке графического интерфейса.
Обратим внимание на циклы, обработчики событий табличного поля ПриИзменении, ПриВыводеСтроки, ПриПолученииДанных, а также на обработчики внешних событий торгового оборудования.
В обычных формах сборщик мусора платформы не всегда может корректно освободить память, если в коде присутствуют циклические связи или накапливаются не очищаемые коллекции данных. Проверим следующие моменты:
Очистить().МенеджерВременныхТаблиц, убедимся, что менеджер явно закрывается или очищается, а временные таблицы не накапливаются в контексте повторяющихся вызовов.ПодключитьОбработчикОжидания. Если подключение обработчика выполняется при каждом сканировании без парного вызова ОтключитьОбработчикОжидания, в системе начинают параллельно выполняться десятки таймеров.Если в конкретном узле РИБ используются специфические сканеры, фискальные регистраторы или эквайринговые терминалы, источником утечки памяти могут выступать native- и COM-компоненты драйверов.
Для 32-разрядного клиента платформы 1С существует жесткое ограничение адресного пространства процесса в 2 ГБ. Уже при приближении к объему 1,2–1,5 ГБ из-за фрагментации памяти поиск непрерывных блоков замедляется, что визуально выглядит как нарастающие зависания интерфейса.
Откроем Диспетчер задач или Process Explorer на терминальном сервере и добавим для процесса 1cv8.exe кассира следующие колонки:
Повреждение динамического кэша конфигурации на терминальном сервере часто приводит к аномальному расходу памяти и зависаниям интерфейса в конкретной сессии.
%LocalAppData%\1C\1Cv8\
%AppData%\1C\1Cv8\