Многие из нас сталкивались с ситуацией, когда после интенсивной работы и закрытия пользовательского режима 1С:Предприятие 8 программа еще пару минут висит в фоновых процессах. Из-за этого платформа не дает открыть базу монопольно через Конфигуратор. В Диспетчере задач при этом видно, как медленно, мегабайт за мегабайтом, освобождается оперативная память. В таких ситуациях возникает вопрос: есть ли в 1С механизм принудительной записи буферов на диск, чтобы программа закрывалась мгновенно? Давайте разберем эту ситуацию по шагам, проанализируем истинные причины такого поведения платформы и выясним, как решить проблему.
Часто пользователи предполагают, что после закрытия 1С долго сбрасывает какие-то внутренние буферы данных на жесткий диск. Некоторые даже пытаются использовать системные утилиты синхронизации диска. На самом деле, операционная система управляет дисковым кэшем самостоятельно, и задержка при выходе из 1С с этим практически не связана. Как справедливо отмечают специалисты, зависание в Диспетчере задач — это работа не дисковой подсистемы, а механизмов управления памятью самой платформы.
Конечно, использование быстрого SSD-диска под операционную систему и кэш программ в целом ускоряет работу. Но, как показывает практика, при сильной загрузке оперативной памяти 1С будет долго закрываться даже на самых современных NVMe SSD накопителях.
Рассмотрим подробнее, что на самом деле происходит в момент нажатия на «крестик». Программа не просто «выбрасывает» данные и убивает свой процесс. Платформа начинает корректно завершать работу, и в этот момент в дело вступают так называемые деструкторы.
Деструкторы — это специальные внутренние механизмы платформы, которые планомерно удаляют объекты из памяти. 1С последовательно разрушает созданные в ходе сеанса COM-объекты, очищает огромные внутренние коллекции, таблицы значений и глобальные переменные. Если в течение рабочего дня сеанс 1С потреблял много памяти, неизбежно возникает сильная фрагментация (состояние, когда занятые блоки памяти в ОЗУ чередуются со свободными). Поблочное высвобождение сильно фрагментированной памяти силами деструкторов платформы требует огромного количества процессорного времени. Именно поэтому процесс 1cv8.exe так долго висит в Диспетчере задач.
Проанализируем специфику работы платформы с «тяжелыми» данными. В процессе работы 1С кэширует информацию в оперативной памяти для ускорения последующего доступа. Если пользователь формировал гигантские отчеты, просматривал сотни документов с прикрепленными сканами или картинками, платформа держит этот объемный кэш в ОЗУ. При закрытии программы выгрузка этого гигантского объема данных и синхронизация временных файлов требуют значительного времени.
Посмотрим на внешние факторы, которые многократно усугубляют задержку деструкторов:
SplWOW64.exe, которая ждет завершения по долгому таймауту.Выясним, как мы можем ускорить процесс закрытия 1С и быстрее освободить базу для входа в Конфигуратор.
SplWOW64TimeOut, чтобы служба печати не задерживала завершение пользовательского сеанса.
taskkill /F /IM 1cv8.exe
Важное предупреждение: прибегать к команде taskkill следует только в крайних случаях! При регулярном принудительном завершении процесса деструкторы платформы не успевают корректно отработать, что со временем может привести к повреждению локального пользовательского кэша 1С. Если это произойдет, кэш придется очищать вручную, иначе при последующих запусках программы могут возникать непредсказуемые ошибки интерфейса.
Подводя итог, мы видим, что долгое освобождение памяти после закрытия 1С — это штатная работа платформы по очистке объектов (деструкторов), а не сброс буферов на диск. Оптимизировав работу антивируса и понимая механизмы памяти, мы можем значительно сократить время ожидания перед запуском Конфигуратора.