Почему клиент 1С со временем начинает работать медленно и зависать до перезапуска?

Программист 1С v8.3 (Обычные формы) 1С:Комплексная автоматизация Торговля и дистрибуция
← На главную

При длительной непрерывной работе в терминальном сеансе (RDP) пользователи рабочего места кассира (РМК) или операторы часто сталкиваются с ситуацией, когда простые операции — сканирование штрихкода, подбор из пречека, считывание дисконтной карты, редактирование количества — начинают выполняться с нарастающей задержкой. Спустя 1–2 часа интерфейс начинает откликаться рывками, а потребление оперативной памяти процессом 1cv8.exe непрерывно растет. После перезапуска сеанса 1С скорость восстанавливается, но затем цикл повторяется.

Разберем основные причины такого поведения и пошаговый алгоритм локализации проблемы на обычных формах (в конфигурациях уровня КА 1.1, УПП 1.3, УТ 10.3).

1. Локализация узкого места с помощью замера производительности

Первым делом выясним, на каком именно уровне происходит задержка: в коде конфигурации, при обращении к внешним библиотекам или при отрисовке графического интерфейса.

  1. Подключимся отладчиком к проблемному терминальному сеансу пользователя.
  2. Запустим замер производительности в момент, когда кассир ощущает явные торможения при сканировании и редактировании строк.
  3. Проанализируем строки модуля формы и общих модулей с наибольшим процентом времени выполнения.

Обратим внимание на циклы, обработчики событий табличного поля ПриИзменении, ПриВыводеСтроки, ПриПолученииДанных, а также на обработчики внешних событий торгового оборудования.

2. Аудит кода на утечки памяти и циклические ссылки

В обычных формах сборщик мусора платформы не всегда может корректно освободить память, если в коде присутствуют циклические связи или накапливаются не очищаемые коллекции данных. Проверим следующие моменты:

  1. Таблицы значений и списки в памяти: проверим, не происходит ли при каждом сканировании товара или пречека добавление строк в глобальные переменные модуля формы или сеанса без их предварительной очистки методом Очистить().
  2. Временные таблицы в запросах: если в коде пересчета скидок и дисконтных карт формируются запросы с использованием МенеджерВременныхТаблиц, убедимся, что менеджер явно закрывается или очищается, а временные таблицы не накапливаются в контексте повторяющихся вызовов.
  3. Обработчики ожидания: проверим модуль формы РМК на наличие вызовов ПодключитьОбработчикОжидания. Если подключение обработчика выполняется при каждом сканировании без парного вызова ОтключитьОбработчикОжидания, в системе начинают параллельно выполняться десятки таймеров.

3. Диагностика внешних компонент и торгового оборудования

Если в конкретном узле РИБ используются специфические сканеры, фискальные регистраторы или эквайринговые терминалы, источником утечки памяти могут выступать native- и COM-компоненты драйверов.

  1. Проанализируем версии внешних компонент и драйверов оборудования, загружаемых в сеансе 1С.
  2. Если драйвер сканера или дисплея покупателя обращается к COM-объектам, проверим, не создаются ли новые COM-экземпляры при каждой итерации без освобождения ссылок.
  3. Временно протестируем работу рабочего места кассира в режиме клавиатурного ввода (без загрузки подозрительной внешней компоненты), чтобы исключить влияние драйвера.

4. Мониторинг системных ресурсов и дескрипторов Windows

Для 32-разрядного клиента платформы 1С существует жесткое ограничение адресного пространства процесса в 2 ГБ. Уже при приближении к объему 1,2–1,5 ГБ из-за фрагментации памяти поиск непрерывных блоков замедляется, что визуально выглядит как нарастающие зависания интерфейса.

Откроем Диспетчер задач или Process Explorer на терминальном сервере и добавим для процесса 1cv8.exe кассира следующие колонки:

  1. Выделенная память (Private Bytes): показывает фактический рост оперативной памяти.
  2. Объекты GDI и Объекты USER: лимит по умолчанию составляет 10 000 объектов на процесс. При частой перерисовке сложных табличных частей на обычных формах утечка дескрипторов графики приводит к критическому падению скорости интерфейса.
  3. Дескрипторы (Handles): постоянный рост числа открытых хэндлов указывает на незакрытые файловые потоки или COM-соединения.

5. Очистка локального кэша платформы

Повреждение динамического кэша конфигурации на терминальном сервере часто приводит к аномальному расходу памяти и зависаниям интерфейса в конкретной сессии.

  1. Завершим сеанс пользователя в 1С.
  2. Очистим папки локального кэша в профиле терминального пользователя:

    %LocalAppData%\1C\1Cv8\

    %AppData%\1C\1Cv8\

  3. Удалим и заново добавим информационную базу в списке запуска, чтобы обновить внутренний идентификатор базы.
← На главную