1С і ресурси сервера

Недавно стикнувся із ситуацією: процес 1С після виконання доволі масивної обробки з’їдав більше 1 ГБ пам’яті. Це було неприпустимо і я почав шукати проблемні місця в коді. Після операцій із заміром продуктивності коду і пошуку в неті інформації по проблемам із звільненням пам’яті в 1С знайшов в себе в коді “вразливі” місця, після виправлення яких результат виконання обробки займав не більше 100 МБ. Ось список з деких вразливих місць, на яких 1С загрібає собі пам’яті:

  1. Доступ до реквізитів об’єкта, отриманого запитом, через крапку. В моїй конфігурації довідник “Номенклатура” доволі об’ємний об’єкт. При написанні запиту, я вирішив схитрувати і вибирати реквізити не запитом, а через крапку. В результаті надурив сам себе. При доступі через крапку, 1С завантажує собі в пам’ять весь об’єкт і потім вже шукає значення потрібного реквізиту. Але попередній покажчик  з пам’яті не очищує.
  2. Створення конструкцій типу “Новый Массив”, “Новый Структура”, “Новый СписокЗначений” в циклі. Для кожного з них, 1С резервує місце в пам’яті і вертає покажчик на це місце. І якщо змінна, в яку поміщається дана конструкція не оголошена в розділі змінних модуля чи процедури/функції – при наступній ітерації виділяється нове місце в пам’яті, а попереднє не затирається. Порахуйте кількість ітерацій і отримаєте об’єм зайнятої пам’яті.
  3. Запит в циклі – знаю, що неправильно по методології, що по рукам можна отримати, але в кожного бувають ситуації, коли обійти це обмеження важко. Просто треба розуміти, коли реалізуєш запит в циклі, то йде загромадження пам’яті процесу.

Після всіх моїх операцій із оптимізації мені згадалась історія про 1 байт).