Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[Autoit] Редактор комментариев descript.ion
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Sun Jun 14, 2020 17:36    Post subject: Reply with quote

imig73 wrote:
или мне кажется и надо креститься?

Думаю, кажется, 15% не так просто заметить, только если на очень больших массивах.

Flasher wrote:
Я такую опцию не предлагал.

Flasher wrote:
Если юникодных символов нет, то — ANSI, если есть, то — в соответствии со значениями (4,5,6) ключа

Ну как же не предлагал. Это и есть смешанный режим, ansi+юникод. Вот зачем он, почему просто не выбрать по умолчанию какой-нибудь юникод?

Flasher wrote:
Минимальные показатели вышли такими

Уже больше похоже на норму.

Хотя, как оказалось я не совсем правильно оценивал скорость. Не там искал, называется, основная причина не в скорости загрузки файла (хотя то, что в результате удалось ускорить 15% - все равно неплохо).

В искусственных условиях, когда все комменты одинаковые, на большом количестве выделенных файлов, задержка оказывается значительно больше, чем когда комментарии разные. Причина в функции _GetDefDescr, которая возвращает общий коммент для выделенных файлов. Если у большого числа файлов одинаковый комментарий, функция пройдет все эти файлы до конца, а это очень, очень долго. Чем больше, тем дольше.

Замерил чистую скорость загрузки descript.ion, она оказалась на фоне всего остального очень малой: например, файл из 8500 записей загружается за ~250мс, файлы в несколько сотен записей вообще исчезающе малые 5-15мс.

В общем получатся, что главная проблема - медленная выборка из массива. Если бы в Autoit все же довели до релиза поддержку хэш-таблиц, думаю это можно было бы радикально ускорить.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Jun 14, 2020 21:40    Post subject: Reply with quote

Loopback wrote:
Ну как же не предлагал. Это и есть смешанный режим, ansi+юникод.
Ты пишешь "Если же будет в наличии опция". Где в наличии? Она в ТС уже есть (в ini и настройках), в самой утилите опции (пункту меню) откуда взяться и зачем? Я такой не предлагал. Тип тут ни при чём.

Loopback wrote:
Вот зачем он, почему просто не выбрать по умолчанию какой-нибудь юникод?
Я уже объяснял. Изначально я написал, как теперь работает мой Ctrl+Z. Системный диалог для одного объекта и твой — для нескольких. Логично, что должно быть аналогичное поведение с автовыбором кодировки при одном вызове/хоткее (с режимом MCE_MULTI_ONLY или без — не суть).

Loopback wrote:
Уже больше похоже на норму.
Только ты описываешь ситуацию с наличием комментов, а я тестировал без них.

Loopback wrote:
Причина в функции _GetDefDescr, которая возвращает общий коммент для выделенных файлов.
А, типа чтобы показать этот коммент в случае совпадения. Ясно.

Loopback wrote:
Чем больше, тем дольше.
Так и при отсутствии descript.ion это момент никуда не уходит.

Loopback wrote:
Если бы в Autoit все же довели до релиза поддержку хэш-таблиц
Можно SQL-запросом общие числа по фильтру получать на сравнение. Но я бы начал со сравнения верхней и нижней строки.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Mon Jun 15, 2020 21:15    Post subject: Reply with quote

Flasher wrote:
Где в наличии? Она в ТС уже есть (в ini и настройках), в самой утилите опции (пункту меню) откуда взяться и зачем? Я такой не предлагал. Тип тут ни при чём.

Ладно, проехали, выложу сегодня новую версию, будет так как будет.

Flasher wrote:
Так и при отсутствии descript.ion это момент никуда не уходит

Ну тогда смотри дальше. Кроме этого момента я больше не нашел узких мест.

Flasher wrote:
Можно SQL-запросом общие числа по фильтру получать на сравнение. Но я бы начал со сравнения верхней и нижней строки.

Долго думал. При чем тут SQL, еще и БД сюда прикрутить?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Mon Jun 15, 2020 21:44    Post subject: Reply with quote

Loopback wrote:
Ну тогда смотри дальше.
А у тебя сколько даёт winsxs без файла?

Loopback wrote:
При чем тут SQL, еще и БД сюда прикрутить?
Читаем текст через OLEDB по типу csv, фильтруем по первому значению. Если число найденного совпадает с числом строк, то выводим общий коммент.
Хотя не, там же пробел как делитель пойдёт, это не годится...
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Mon Jun 15, 2020 23:24    Post subject: Reply with quote

Flasher wrote:
А у тебя сколько даёт winsxs без файла?

На текущей версии ~4400мс, но там 21900 каталогов. Однако в данном случае еще дает о себе знать операция по заполнению комбобокса с файлами, попробую его через функции API заполнять, может будет быстрее. UP: не быстрее.

Flasher wrote:
Читаем текст через OLEDB

А, вот оно что. Ну, если бы я хотел использовать COM, можно было бы и Scripting.Dictionary задействовать.

Интереса ради попробовал использовать хэш-таблицы (Map в Autoit) для выборки в _GetDefDescr в худшем сценарии (одинаковые комментарии). На 300 элементах скорость 60 и 0,5мс соответственно. На 8500 - аж 44с(!) и 20мс, разница больше чем на три порядка...

На самом деле все эти измерения носят больше академический характер, сомневаюсь, что многие работают с тысячами комментариев. Но как-то раньше не задумывался о скорости работы с массивами, и что-то она довольно печальная.


Выложил бету.

Логика такая: если нет юникодных имен, и в загружаемом файле нет юникодных символов - разрешена запись в ANSI, в противном случае для сохранения разрешен только юникод. Если загружается ANSI-файл, можно сохранить кодировку или поменять на юникод. Если после запуска после учета вышеописанных условий запись в ANSI была разрешена, то при появлении в редакторе юникодного символа возможность сохранения ограничивается юникодом, при удалении символа снова появляется возможность сохранить в ANSI и т.д.

В интерфейсе показывается текущая кодировка, в комбобоксе - выбор целевой.

Тип дефолтного юникода можно задавать третьим параметром через "|": MCE_DEFENC_UTF8, MCE_DEFENC_UTF16, MCE_DEFENC_UTF16BE. Если параметра нет - используется UTF-8.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jun 16, 2020 09:26    Post subject: Reply with quote

Loopback wrote:
На текущей версии ~4400мс, но там 21900 каталогов.
Ну так и куда мне смотреть дальше?

Loopback wrote:
Ну, если бы я хотел использовать COM, можно было бы и Scripting.Dictionary задействовать.
И что от него толку на больших массивах? Как можно добавку с проверкой каждого элемента в коллекцию с SQL-фильтрацией уже имеющегося файла сравнивать? Это земля и небо.

Loopback wrote:
На 8500 - аж 44с(!) и 20мс, разница больше чем на три порядка...
Вот это тормоза. Только 20 мс на объект что-то маловато для 44 сек. Ничего не путаешь?

Loopback wrote:
в противном случае для сохранения разрешен только юникод.
После выделения юникодных по умолчанию вижу ANSI.

Loopback wrote:
Если параметра нет - используется UTF-8.
Ты же сам писал, что Юникод (UTF-16) вдвое быстрее, а UTF-8 только в 1.5. Question

P.S.: В исходнике инклудов целая гора, хотел, собстно, скрипт в коллекцию, а вышло, что надо аж 14... Не вариант.
Кстати, почему он по умолчанию с англ. языком выводит?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Tue Jun 16, 2020 12:39    Post subject: Reply with quote

Flasher wrote:
Ну так и куда мне смотреть дальше?

Не знаю, это же в основном у тебя, кажется, были проблемы со скоростью. Я нашел только два узких места. Выборку потенциально можно ускорить, а вот загрузку комбобокса с файлами нет, только если совсем отключить.

Flasher wrote:
Как можно добавку с проверкой каждого элемента в коллекцию с SQL-фильтрацией уже имеющегося файла сравнивать?

Если изначально хранить комменты в коллекции вместо массива, то очень даже можно. Не знаю, насколько быстро работает Dictionary, но разницу с использованием Map-ов Auutoit я привел.

Flasher wrote:
Только 20 мс на объект что-то маловато для 44 сек. Ничего не путаешь?

Так обе цифры - это время обработки всего списка файлов. Сам удивился разнице, дважды перепроверил, но факт.

Flasher wrote:
После выделения юникодных по умолчанию вижу ANSI.

Значит не совсем юникод и имена могут быть без потерь сохранены в ANSI в системной кодировке.

Flasher wrote:
Ты же сам писал, что Юникод (UTF-16) вдвое быстрее, а UTF-8 только в 1.5.

В той реализации, сейчас без разницы. ANSI будет медленнее, но только на очень старых файлах, в которых юникодные имена были сохранены с потерями.

Flasher wrote:
В исходнике инклудов целая гора, хотел, собстно, скрипт в коллекцию, а вышло, что надо аж 14... Не вариант.

Кроме трёх, что приложены, они стандартные. Но все решаемо, есть два пути, сложный и простой. Можешь выковырять нужные константы и функции и поместить в основной скрипт. Или просто скомпилировать всё в a3x.

Flasher wrote:
Кстати, почему он по умолчанию с англ. языком выводит?

Кто выводит и что? Язык берется из активной копии TC, русский перевод в lng-файле.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jun 16, 2020 13:32    Post subject: Reply with quote

Loopback wrote:
Не знаю, это же в основном у тебя, кажется, были проблемы со скоростью.
Ты реагировал на тезис:
Flasher wrote:
Так и при отсутствии descript.ion это момент никуда не уходит
И подтвердил его. Какие у меня проблемы, если это проблемы кода?
Loopback wrote:
только если совсем отключить.
Вот эта опция бы точно не помешала.

Loopback wrote:
Если изначально хранить комменты в коллекции вместо массива
Что значит "изначально"? Изначально там быть не может, т. к. коллекция формируется цикличным помещением в неё двух элементов, в данном случае — имён и комментариев.

Loopback wrote:
Так обе цифры - это время обработки всего списка файлов.
Числа. А второе что проверяет? Запись в ion?

Loopback wrote:
Значит не совсем юникод и имена могут быть без потерь сохранены в ANSI в системной кодировке.
Нет, там ??? появлялись. Уточню — ANSI появляется, если descript.ion в ней уже был.

Loopback wrote:
Кроме трёх, что приложены, они стандартные.
Я не храню, как и многие, инклюды в сборке. Или совсем по минимуму.

Loopback wrote:
Или просто скомпилировать всё в a3x.
Пожалуй, так и сделаю.

Loopback wrote:
русский перевод в lng-файле.
Точно, не подумал. В Source-то его нет.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Tue Jun 16, 2020 15:05    Post subject: Reply with quote

Flasher wrote:
Какие у меня проблемы, если это проблемы кода?

Так я и написал, что на больших количествах файлов проблема с комбобоксом. Ну вот специально протестировал на том же каталоге в 21900 элементов, при отключенном комбобоксе задержка полного запуска ~300мс (вместо 4,4с), что для такого количества более чем приемлемо. На количестве до 1000 элементов у меня задержка не превышает 100мс. Скорость чистой загрузки скрипта на одном файле где-то 50-70мс, быстрее уже не сделаешь. Но нужно понимать, что эти измерения производятся уже после того, как интерпретатор загрузил и отпарсил скрипт, сам парсинг тоже занимает какое-то время, которое, наверно, можно замерить, но лень да и не имеет смысла, поскольку это время все равно существенно не уменьшить.

Flasher wrote:
Вот эта опция бы точно не помешала.

Ну вот только ее и можно сделать.

Flasher wrote:
Изначально там быть не может, т. к. коллекция формируется цикличным помещением в неё двух элементов, в данном случае — имён и комментариев.

Если точнее - ключа (имя файла) со значением (комментарий). Естественно, предполагается что коллекция создается один раз на этапе парсинга descript.ion и в дальнейшем вся работа идет с ней.

Flasher wrote:
Нет, там ??? появлялись. Уточню — ANSI появляется, если descript.ion в ней уже был.

Тогда было бы неплохо образцы файлов с этими именами. Проверка как раз и проводится по принципу, ожидаются ли символы замещения при конвертации в ANSI на текущей кодовой странице. На моих тестовых файлах варианта ANSI не появляется.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jun 16, 2020 15:26    Post subject: Reply with quote

Loopback wrote:
Так я и написал, что на больших количествах файлов проблема с комбобоксом.
Она на небольших такая. Просто менее ощутимая.
Loopback wrote:
где-то 50-70мс, быстрее уже не сделаешь.
Ну вот только ее и можно сделать.
Желательно, т. к. это куда ближе к доле чел. реакции (41 мс). Плюс я не вижу удобным использовать выпадающий список для правки попунктным выбором.

Loopback wrote:
Естественно, предполагается что коллекция создается один раз на этапе парсинга descript.ion
Так на это уходит куда больше времени, чем обращение к базе с SQL-выборкой.

Loopback wrote:
Тогда было бы неплохо образцы файлов с этими именами.
Зачем тебе образцы? Имён должно быть достаточно: àéÿüĄŀĦĤŕž☠ | オリジナルサウンドトラック~
Ты условие выполнил? Если бы проблема была в поиске символов, то и при отсутствии ion была бы та же проблема.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Tue Jun 16, 2020 15:45    Post subject: Reply with quote

Flasher wrote:
Так на это уходит куда больше времени, чем обращение к базе с SQL-выборкой.

Тестировал, в данном конкретном случае?

Flasher wrote:
Имён должно быть достаточно:

На этих именах у меня ANSI не появляется.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jun 16, 2020 16:16    Post subject: Reply with quote

Loopback wrote:
Тестировал, в данном конкретном случае?
В данном нет, т. к. объяснял, почему тут сие не канает.

Loopback wrote:
На этих именах у меня ANSI не появляется.
В комбобоксе — нет, там пусто. После сохранения:
Code:
ANI test
aeyuA?HHrz? ЄхёЄ
?????????????~ ЄхёЄ

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Tue Jun 16, 2020 16:41    Post subject: Reply with quote

Flasher wrote:
В комбобоксе — нет, там пусто


Ну вот. А в исходном багрепорте:

Flasher wrote:
После выделения юникодных по умолчанию вижу ANSI.

И потом
Flasher wrote:
Уточню — ANSI появляется, если descript.ion в ней уже был.


Вот как это можно было понять? "Вижу ANSI", "ANSI появляется" - значит вроде как в вариантах выбора. А там его нет. Проблема не в определении юникода в именах, а в не установленной в этом случае целевой кодировке.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Jun 16, 2020 16:48    Post subject: Reply with quote

Loopback wrote:
значит вроде как в вариантах выбора.
Я смотрел на выделенное слева от комбобокса со стрелочным указателем и пустое поле. Понял это так, что раз ANSI нет в комбобоксе, то она и идёт умолчательной.

Loopback wrote:
Проблема не в определении юникода в именах, а в не установленной в этом случае целевой кодировке.
Не только неустановленной, но и несохраняемой. Ты же это мог и без меня заметить, не правда ли? Wink
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 1274

Post (Separately) Posted: Tue Jun 16, 2020 21:48    Post subject: Reply with quote

Flasher
Кто-то мог бы заметить, кто-то мог бы чуть точнее описывать проблему...

Так или иначе, исправил. Флаг MCE_DISABLE_SINGLEEDIT для отключения пофайлового редактора добавил. Лежит тут.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next
Page 3 of 9

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group