1С против внешней компоненты на C++: бенчмарк на вашем сервере
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Внешняя обработка решает одни и те же задачи двумя способами: кодом на 1С и внешней компонентой (DLL на C++, технология Native API), и меряет разницу на вашем сервере. Компонента лежит внутри обработки макетом и подключается сама, класть файлы на сервер не нужно.

Что внутри
- 31 тест в семи группах: стоимость вызова компоненты, JSON, строки, числа, пакетные преобразования, построчное сравнение текстов, потоки.
- У каждой задачи до трёх вариантов на 1С: как пишут обычно, оптимизированный и платформенным средством, если оно есть. Компонента сравнивается с лучшим из них.
- Время компоненты меряется от начала до конца: подготовка данных в 1С, вызов, разбор ответа. Фазы видны отдельно.
- Каждый тест проверяет, что все варианты дали одинаковый результат. Расхождение видно строкой в таблице.
- Лестница объёмов показывает, с какого объёма компонента начинает окупаться.
- Режим подключения компоненты на выбор (8.3.27 и новее): по умолчанию платформы, изолированно или в процессе 1С. На стенде статьи пустой вызов стоит 123 мкс изолированно и 4 мкс в процессе 1С.
- Результаты сохраняются в JSON: можно сравнить свой сервер с цифрами статьи.
Где внешняя компонента выигрывает
Вкладка "Где нативка выигрывает" показывает цифры стенда статьи и советник: задача и объём на входе, оценка времени 1С и компоненты в обоих режимах на выходе.


Десять выигравших ядер вызываются из своего кода как функции обработки: итоги и переименование полей JSON, разбор CSV, итоги дат и чисел, поиск подстрок, расстояние Левенштейна и нечёткие дубли, сравнение текстов, кодирование и декодирование Base64. Если компонента не подключилась, те же функции считают результат на встроенном языке, код вызова менять не нужно.
В обёртку попала задача, которая в процессе 1С выиграла от 2 раз и встречается в прикладном коде. Числовые тесты (сумма в цикле, матрицы, статистика, рюкзак, Монте-Карло) выигрывают в разы и в сотни раз, но это демонстрация принципа, поэтому функциями обработки они не вынесены.
Как запустить
- Откройте обработку в клиент-серверной базе (лучше в копии), не в безопасном режиме.
- В шапке формы проверьте строку о компоненте: подключена или почему нет.
- Отметьте тесты, при необходимости уменьшите число ступеней, нажмите "Запустить замеры".
- "Сохранить results.json" - файл со всеми замерами и описанием окружения.

Требования
- Управляемые формы. Замеры статьи и проверка обработки сняты на платформе 8.3.27.1606, Windows x64. Модуль написан без возможностей новее 8.3.20, но на 8.3.20 обработка не запускалась.
- Компонента собрана под Windows x64. Под Linux сборки нет, на Linux-сервере обработка не проверялась.
- Безопасный режим и профиль безопасности, запрещающий внешние компоненты, по замыслу отключают варианты с компонентой, остальное считается на встроенном языке. Этот путь на стенде не проверялся.
Методика, все замеры и разбор, почему режим подключения важнее кода на C++: Когда внешняя компонента на C++ ускоряет 1С, а когда тормозит её.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.22.67
Вступайте в нашу телеграмм-группу Инфостарт