Если выделить многострочный строковый литерал в большом модуле (пробовал и в начале и в конце модуля). Например такой
ф = "ВалютаРегламентированногоУчета1
|";
И выполнить
ТурбоКонф.ВставитьТекст("ВалютаРегламентированногоУчета2
|";
То вставка в модуле размером 5 тыс. строк у меня стабильно занимает 1200мс. А вставка однострочного литерала в том же месте занимает <100мс
#1, 30 декабря 2023 19:39
Лог прилагаю
Ссылка скрыта
#2, ред. 03 января 2024 17:52
В логе не вижу медленной вставки, как и строк которые на скриншоте. Возможно лог не тот.
У меня вставка происходит быстро, но фрагмент кода возможно некорректный, т.к. содержит синтаксическую ошибку, а также судя по всему код должен вставлять значение как оно есть (с кавычками и символом переноса строк), я так предполагаю судя по выделению на скриншоте.
bolsun изменил статус на На выяснении
#3, ред. 03 января 2024 18:48
Сделал внешнюю обработку. Надо открыть ее модуль и выделить метод ДобавитьСловоЛокальногоКонтекста. Далее нужно программно вставить выделенный текст вместо исходного с добавлением табуляции в начале.
В моем скрипте тест проводился командой "ИР Форматировать текст". Скрипт я могу выложить, но работать без обновления ИР он не будет.
Ссылка скрыта
ОтважныйБобр.epf
#4, 03 января 2024 19:14
(3) tormozit, вставляет быстро.
#5, 03 января 2024 19:16
(4) bolsun, В логе видно, что вставляет 1200мс
#6, 03 января 2024 19:17
(5) tormozit, в логе вижу. У меня вставляет быстро.
#7, 03 января 2024 19:18
Ищи фиксированные задержки в своем коде, которые в сумме дают 1200мс. Длительность высоко стабильная.
#8, 03 января 2024 19:25
Вот фрагмент замера из скрипта
RDT.os
#9, 03 января 2024 19:26
(7) tormozit, почему 1000 мс - вполне понятно. Это максимальное время первой проверки вставки. А 200 мс повторная проверка.
Вопрос в том почему первая не проходит.
#10, 03 января 2024 19:27
Есть одно предположение, скину тестовую.
#11, 03 января 2024 19:35
https://disk.yandex.ru/d/XKCz9ijzgtoO1w
#12, 03 января 2024 20:14
Ссылка скрыта
Проблема сохранилась.
#13, 03 января 2024 20:18
(12) tormozit, почему в логе два вызова вставить текст идет с интервалом 200 мс?
#14, 03 января 2024 20:18
Записал видео с новым логом. Вызывал команду "Форматировать текст". Проблема случается часто, но не всегда. Обязательное условие - вставляемый текст отличается от выделенного фрагмента в поле документа и должно быть больше одной строки.
Ссылка скрыта
xFeamucdF1.mp4
#15, 03 января 2024 20:19
(13) bolsun, https://turboconf.ru/Tasks/9025
#16, 03 января 2024 20:23
(15) tormozit, при множественной вставке из буфера, всегда будут возникать различного рода проблемы.
#17, 03 января 2024 20:24
Нужен чистый тест, с одним вызовом вставки.
#18, ред. 03 января 2024 20:31
(15) tormozit, написал в той теме, как запомнить выделение без вызова метода ВставитьТекст.
#19, ред. 04 января 2024 11:33
Еще раз провел тест (14) и записал лог.
Все средства для воспроизведения приложены.
ИР 7.08 опубликована
ИР адаптер 1.19 опубликован
ОтважныйБобр.epf
Ссылка скрыта
#20, 04 января 2024 15:14
bolsun изменил статус на Подтвержденный баг
#21, 04 января 2024 15:34
(19) @tormozit, https://disk.yandex.ru/d/XKCz9ijzgtoO1w
#22, 04 января 2024 15:41
Проверил. Теперь задержка всегда маленькая 100-200мс.
tormozit изменил статус на Закрыто
#23, ред. 05 января 2024 14:33
Снова случилась. Теперь в базе редактора скриптов. В методе ПерейтиПоСсылкеСтрокиМодуля() нужно выделить слово "Значение" и выполнить команду "ИР Переименовать слово"
Ссылка скрыта
tormozit изменил статус на Открыто
#24, 14 января 2024 17:05
Проблему регулярно наблюдаю. Вот свежий лог
Ссылка скрыта
#25, ред. 14 января 2024 19:50
(23) tormozit, пытался выполнить инструкцию, получил ошибку
ScriptEngine.Machine.PropertyAccessException: {Модуль D:\Projects\TurboConf\TurboConf.HostApplication\bin\Debug\user_scripts\RDT.os / Ошибка в строке: 1970 / Свойство объекта не обнаружено (ВесьМодульИзменен)}
ПередатьИзмененияИзПоляТекстаВОкноМодуля(ПолеТекстаПрограммы,, Результат.ВесьМодульИзменен); в ScriptEngine.Machine.Contexts.UnmanagedCOMWrapperContext.FindProperty(String name)
в ScriptEngine.Machine.MachineInstance.ResolveProp(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters) в D:\Projects\TurboConf\TurboConf.HostApplication\HostApplicationForm.cs:строка 274
//@script_version 16
#26, 14 января 2024 19:52
Было обновление ИР перед этим. После перезапуска клиента командой "Завершить работу клиента", заработало. Почему бы не перезапускать клиент автоматом, после обновления?
#27, 14 января 2024 19:57
На примере из (23) у меня не воспроизводится.
#28, ред. 14 января 2024 19:59
(27) bolsun, измени новое слово, иначе фактической вставки Турбоконф не сделает, т.е. нужно сделать фактическое переименование.
#29, 14 января 2024 19:59
(26) bolsun, записал себе в заметки для подумать
#30, 14 января 2024 20:10
(28) tormozit, не воспроизводится. Если есть возможность воспроизвести нужен ролик.
#31, 14 января 2024 20:26
Y9vu9NE1fM.mp4
#32, ред. 15 января 2024 10:46
Та же проблема с командой "ИР Переименовать слово" и на другом рабочем месте в другой конфигурации
Ссылка скрыта
#33, 15 января 2024 20:49
У меня все эти примеры отрабатывают нормально, видимо есть какие-то нюансы воспроизведения.
#34, ред. 15 января 2024 20:54
Ну видимо нужно расширить в Турбоконфе логирование этой операции, если видео и текущий лог не помогают.
#35, 16 января 2024 15:28
Примерно 4 из 5 раз при выполнении команды "ИР Переименовать слово" возникает эта задержка.
[Лог с новой версии Ссылка скрыта
#36, 16 января 2024 18:36
Воспроизвел. Отличие было в размерах окна модуля. В твоем примере граница выделения заменяемого фрагмента уходила за нижнюю границу окна модуля, в моих тестах влезало в окно целиком.
bolsun изменил статус на Подтвержденный баг
#37, 16 января 2024 20:58
(35) tormozit, проверь на этой версии
https://disk.yandex.ru/d/XKCz9ijzgtoO1w
#38, 16 января 2024 21:05
(37) bolsun, проверил. Из 10 тестов все выполнились менее чем за 300мс. Видимо исправлено.
tormozit изменил статус на Закрыто
#39, ред. 31 января 2024 11:20
Еще пример вставки 1500мс
Ссылка скрыта
Вставлял текст запроса вместо старого в приложенном методе Clip_550421.html
tormozit изменил статус на Открыто
#40, 11 февраля 2024 18:28
Еще пример вставки 5300мс
Ссылка скрыта
#41, 16 февраля 2024 14:12
(40) tormozit, в данном случае проблема была вызвана тем, что платформа не смогла ответить на запрос UIAutomation за 5сек.
[11.02.24 18:27:26:321] System.Runtime.InteropServices.COMException (0x80131505): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
в UIAutomationClient.IUIAutomation.GetFocusedElementBuildCache(IUIAutomationCacheRequest cacheRequest)
в TurboConf.Core.TurboAPI.TurboApi.GetUIAutomationCachedInfo(IntPtr fg, IUIAutomationElement elem, UIAutoFlags flags)
Почему это могло произойти нужно смотреть скрипт, я так произошло после закрытия такого окна
[11.02.24 18:27:10:717] Окно найдено, found=140318264 , PID=20064, title='Переименовать слово'
#42, ред. 24 февраля 2024 12:14
1400мс в маленьком модуле
Ссылка скрыта
#43, 24 февраля 2024 12:16
Переподключил приложения ИР. Снова 1400мс. Похоже не зависит от его окон.
Ссылка скрыта
#44, 25 февраля 2024 08:53
5200мс
Ссылка скрыта
Сразу после этого вызвал список методов модуля и он выполнялся 30 секунд! Тоже есть в логе.
Пора с этим что то делать.
#45, ред. 25 февраля 2024 10:03
5200мс
Ссылка скрыта
Сразу после этого вызвал окно служебных сообщений Турбоконфа. Оно открывалось 30 секунд! Тоже есть в логе.
#46, 25 февраля 2024 12:40
(45) tormozit, как я выше писал, ошибка не связана с размером текста
[25.02.24 08:51:14:373] System.Runtime.InteropServices.COMException (0x80131505): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
в UIAutomationClient.IUIAutomation.GetFocusedElementBuildCache(IUIAutomationCacheRequest cacheRequest)
в TurboConf.Core.TurboAPI.TurboApi.GetUIAutomationCachedInfo(IntPtr fg, IUIAutomationElement elem, UIAutoFlags flags)
Нужно смотреть конкретное место в скрипте, где делается эта вставка.
#47, 25 февраля 2024 12:44
Вставку делает строка скрипта
ТурбоКонф.ВставитьТекст(ТекстВставки);
#48, 25 февраля 2024 12:44
Перед ошибкой вижу в скрипте
[25.02.24 08:51:10:125] StopExternalWindowCallAsync..
[25.02.24 08:51:10:121] Warning: Работа TurboConf ВОЗОБНОВЛЕНА после диалога с приложением ИР
Ctrl+C
Ctrl+V
#49, ред. 25 февраля 2024 12:45
(47) tormozit, ошибка возникает до вставки. Перед ВставитьТекст() идет Ctrl+C Ctrl+V
#50, 25 февраля 2024 12:46
(49) bolsun, Что есть ошибка?
Я не писал про ошибку. Я писал про длительность вставки, которую замеряет и выводит Турбоконф.
#51, ред. 25 февраля 2024 12:48
(50) tormozit, что-то в твоем скрипте делает Ctrl+C Ctrl+V, что блокирует UIAutomation на 5секунд, что влияет на время выполнения команды ВставитьТекст().
#52, 25 февраля 2024 12:48
Еще раз 5 секунд к времени выполнения вызваны предыдущими действиями скрипта. Покажи код.
#53, 25 февраля 2024 12:49
(51) bolsun, Ctrl+C Ctrl+V делается умышленно в методе СохранитьГраницыВыделенияДляОтмены() по твоему совету - для сохранения границ выделения в истории редактирования модуля
#54, 25 февраля 2024 12:51
(53) tormozit, UIAutomation платформы не отвечает, когда происходят операции с буфером. Значит нужно дождаться окончания операции копирования/вставки из буфера, например окном Поиск.
#55, ред. 25 февраля 2024 13:01
Тогда прошу снова рассмотреть возможность реализации опционального сохранения границ выделения в истории редактирования в методе ВставитьТекст() или в отдельном методе СохранитьГраницыВыделенияДляОтмены() в API. Это нужно не редко. А самому пройти через все сложности будет очень непросто. https://turboconf.ru/Tasks/9025