HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. Read more...
Bug #913592
open8.3.17-18-+ Код на сервере приложений взаимодействует с COM объектами значительно медленнее чем на клиенте
0%
Description
https://partners.v8.1c.ru/forum/t/1960915/m/1960915
Конфигурация ПО
8.3.17-18, клиент-сервер, ОС Windows
Проблема
Код на сервере приложений взаимодействует с COM объектами значительно медленнее чем на клиенте.
Воспроизведение
Открыть приложенную внешнюю обработку в управляемом клиентском приложении любой клиент-серверной базы на ОС Windows. Нажать в ней кнопку "Команда1. При этом выполнится код
&НаКлиенте
Процедура Команда1(Команда)
КоличествоПроходов = 500000;
Команда1НаСервере("НаКлиенте", КоличествоПроходов);
Тест(КоличествоПроходов);
КонецПроцедуры
&НаСервере
Процедура Тест(КоличествоПроходов)
Команда1НаСервере("НаСервере", КоличествоПроходов);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура Команда1НаСервере(Имя, КоличествоПроходов)
ОбъектКОМ = Новый COMОбъект("VBScript.RegExp");
МоментНачала = ТекущаяДата();
Для Счетчик = 1 По КоличествоПроходов Цикл
ОбъектКОМ.IgnoreCase = Истина;
КонецЦикла;
Сообщить(Имя + " " + (ТекущаяДата() - МоментНачала));
КонецПроцедуры
и примерно через минуту будет будут выведены сообщения пользователю с длительностью выполнения одинакового цикла
НаСервере 38
НаКлиенте 2
Получается, что серверный код в этом случае в 20 раз медленнее устанавливает свойство COM объекта, чем клиентский код. Я также проверял и на других стандартных COM объектах и на других рабочих местах. Разница всегда значительная - 4-20 раз. Она не зависит от того, устанавливается или читается значение свойства или вызывается метод.
Предполагаю, что связано это с защитой от опасных действий, хотя в протестированных базах она была выключена. Поэтому до 8.3.10 думаю проблемы не было.
Ошибкой не признали. Тех. поддержка ответила:
Это может означать, что VBScript.RegExp использует Single Thread Apartment. В этом случае вызов из клиентского кода выполняется по прямым указателям, а из серверного кода через механизм передачи сообщений в Windows, что может вызвать значительное замедление, но это является ценой за обеспечение потокобезопасности. Поведение штатное.
Files
Related issues
Updated by Сергей Старых about 4 years ago
- Related to Task #881772: Для непортативных вариантов добавлен флажок "Выполнять на сервере" с асинхронным выполнением added