Работа с классической платформой 1С:Предприятие 7.7 на современном оборудовании часто вызывает недоумение: мощный процессор Intel i7-6700k и внушительные 32 ГБ ОЗУ не дают ожидаемого прироста скорости «из коробки». Основная причина кроется в архитектуре программы. 1С 7.7 — это 32-битное приложение, которое по определению не может адресовать более 2–4 ГБ оперативной памяти. Однако наличие избыточного объема ОЗУ открывает перед нами возможности для косвенной оптимизации, которые мы подробно разберем в этой статье.
Проанализируем ситуацию: стандартный исполняемый файл 1cv7s.exe или 1cv7.exe ограничен лимитом в 2 ГБ. Если ваша база данных активно используется для построения тяжелых отчетов, программа может закрываться с ошибкой «Out of memory», даже если в системе свободно еще 30 ГБ. Чтобы позволить 1С видеть до 4 ГБ, мы можем применить флаг Large Address Aware (LAA).
Рассмотрим, как это работает. Специальные утилиты позволяют изменить заголовок исполняемого файла, сообщая операционной системе, что приложение способно работать с расширенным адресным пространством. В 64-битных системах Windows 10 это дает приложению доступ к честным 4 ГБ. Хотя это не заставит 1С «съесть» все 32 ГБ, это значительно повысит стабильность при работе с большими объемами данных в памяти.
Выясним причину медленной работы файловых баз (DBF). Основной тормоз — это постоянные дисковые операции чтения-записи. Имея 32 ГБ ОЗУ, мы можем выделить часть этой памяти (например, 4–8 ГБ) под виртуальный диск (RAM-drive), скорость работы которого в десятки раз выше, чем даже у самых быстрых SSD.
Разберем по шагам, что именно стоит перенести на RAM-диск:
TEMP и TMP для пользователя на RAM-диск, мы исключаем задержки дисковой подсистемы.OpenConf или специализированные библиотеки), позволяющие вынести индексы отдельно от файлов данных *.dbf. Если разместить индексы на RAM-диске, а сами данные оставить на SSD, вы получите колоссальный прирост скорости поиска и записи при сохранении высокой надежности (так как данные остаются на физическом диске).Посмотрим на пример настройки утилиты Intel Rapid Storage Technology (RST), которую часто путают с обычными драйверами чипсета. Если ваша материнская плата (например, на чипсете Z270) поддерживает эту технологию, в настройках приложения можно включить «Кэширование обратной записи».
Это позволяет системе использовать оперативную память как буфер для записи на диск. Операционная система «отчитывается» перед 1С, что данные записаны, как только они попали в быстрый кэш ОЗУ, а физический сброс на SSD происходит чуть позже. Это критически важно для 1С 7.7, которая выполняет множество мелких операций записи при обновлении индексов.
Проанализируем работу современных процессоров. 1С 7.7 — это однопоточное приложение. Оно не умеет распределять нагрузку между всеми ядрами вашего i7-6700k. Для нее важна максимальная частота одного конкретного ядра. Современные функции энергосбережения могут снижать частоту простаивающих (с точки зрения ОС) ядер, что вызывает микрозадержки.
Рекомендуем выполнить следующие действия:
C-States и Intel SpeedStep (EIST). Это заставит процессор всегда работать на максимальной тактовой частоте без «засыпания».1cv7s.exe, выбрав одно физическое ядро (например, CPU 0). Это избавит планировщик Windows от переброски потока между ядрами, что также экономит такты.Разберем ситуацию с сетевыми протоколами. Если ваша база находится не на локальном диске, а в сети, Windows 10 использует протоколы SMB 2/3, которые некорректно работают со старым механизмом блокировок 1С 7.7. Это приводит к катастрофическому замедлению при работе нескольких пользователей.
Для решения необходимо отключить механизм Opportunistic Locking (OpLocks). Рассмотрим пример изменения реестра:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]
"EnableOplocks"=dword:00000000
"CachedOpenLimit"=dword:00000000
Также крайне важно добавить папку с базой данных и расширения файлов *.dbf и *.cdx в исключения Защитника Windows. Постоянная проверка антивирусом каждого обращения к таблице при проведении документа способна замедлить процесс в 2–3 раза.
Если вы используете версию 1С 7.7 для SQL, то штатные механизмы работы с памятью и запросами крайне неэффективны. Для радикального ускорения программисты используют компоненту 1С++.
Рассмотрим подробнее: 1C++ позволяет выполнять прямые SQL-запросы к базе данных, полностью игнорируя штатный движок 1С. Это позволяет получать данные из таблиц объемом в миллионы строк за доли секунды, задействуя всю мощь SQL-сервера и доступную ему оперативную память.
Пример использования прямого запроса в коде:
ТекстЗапроса = "
|SELECT
| Жур.IDDoc as [Док $Документ],
| Жур.IDDocDef as Док_вид
|FROM
| _1SJourn as Жур
|WHERE
| Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата
|";
Запрос = СоздатьОбъект("ПоставщикДанных");
// Использование прямой выборки данных значительно экономит ОЗУ на стороне клиента
Подводя итог нашему анализу, можно сделать вывод: напрямую заставить 1С 7.7 использовать 32 ГБ невозможно, но мы можем использовать этот ресурс для создания идеальной инфраструктуры вокруг программы.
Основные шаги к успеху:
Совокупность этих мер позволит 1С 7.7 работать на современном ПК максимально быстро, насколько это позволяет её архитектура.