[Autoit] Редактор комментариев descript.ion
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Total Commander -> Автоматизация Total Commander

#31:  Author: Loopback PostPosted: Sun Jun 14, 2020 17:36
    —
imig73 wrote:
или мне кажется и надо креститься?

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

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

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

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

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

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

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

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

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

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

#32:  Author: FlasherLocation: Москва PostPosted: Sun Jun 14, 2020 21:40
    —
Loopback wrote:
Ну как же не предлагал. Это и есть смешанный режим, ansi+юникод.
Ты пишешь "Если же будет в наличии опция". Где в наличии? Она в ТС уже есть (в ini и настройках), в самой утилите опции (пункту меню) откуда взяться и зачем? Я такой не предлагал. Тип тут ни при чём.

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

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

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

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

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

#33:  Author: Loopback PostPosted: Mon Jun 15, 2020 21:15
    —
Flasher wrote:
Где в наличии? Она в ТС уже есть (в ini и настройках), в самой утилите опции (пункту меню) откуда взяться и зачем? Я такой не предлагал. Тип тут ни при чём.

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

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

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

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

Долго думал. При чем тут SQL, еще и БД сюда прикрутить?

#34:  Author: FlasherLocation: Москва PostPosted: Mon Jun 15, 2020 21:44
    —
Loopback wrote:
Ну тогда смотри дальше.
А у тебя сколько даёт winsxs без файла?

Loopback wrote:
При чем тут SQL, еще и БД сюда прикрутить?
Читаем текст через OLEDB по типу csv, фильтруем по первому значению. Если число найденного совпадает с числом строк, то выводим общий коммент.
Хотя не, там же пробел как делитель пойдёт, это не годится...

#35:  Author: Loopback PostPosted: Mon Jun 15, 2020 23:24
    —
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.

#36:  Author: FlasherLocation: Москва PostPosted: Tue Jun 16, 2020 09:26
    —
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... Не вариант.
Кстати, почему он по умолчанию с англ. языком выводит?

#37:  Author: Loopback PostPosted: Tue Jun 16, 2020 12:39
    —
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-файле.

#38:  Author: FlasherLocation: Москва PostPosted: Tue Jun 16, 2020 13:32
    —
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-то его нет.

#39:  Author: Loopback PostPosted: Tue Jun 16, 2020 15:05
    —
Flasher wrote:
Какие у меня проблемы, если это проблемы кода?

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

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

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

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

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

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

Тогда было бы неплохо образцы файлов с этими именами. Проверка как раз и проводится по принципу, ожидаются ли символы замещения при конвертации в ANSI на текущей кодовой странице. На моих тестовых файлах варианта ANSI не появляется.

#40:  Author: FlasherLocation: Москва PostPosted: Tue Jun 16, 2020 15:26
    —
Loopback wrote:
Так я и написал, что на больших количествах файлов проблема с комбобоксом.
Она на небольших такая. Просто менее ощутимая.
Loopback wrote:
где-то 50-70мс, быстрее уже не сделаешь.
Ну вот только ее и можно сделать.
Желательно, т. к. это куда ближе к доле чел. реакции (41 мс). Плюс я не вижу удобным использовать выпадающий список для правки попунктным выбором.

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

Loopback wrote:
Тогда было бы неплохо образцы файлов с этими именами.
Зачем тебе образцы? Имён должно быть достаточно: àéÿüĄŀĦĤŕž☠ | オリジナルサウンドトラック~
Ты условие выполнил? Если бы проблема была в поиске символов, то и при отсутствии ion была бы та же проблема.

#41:  Author: Loopback PostPosted: Tue Jun 16, 2020 15:45
    —
Flasher wrote:
Так на это уходит куда больше времени, чем обращение к базе с SQL-выборкой.

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

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

На этих именах у меня ANSI не появляется.

#42:  Author: FlasherLocation: Москва PostPosted: Tue Jun 16, 2020 16:16
    —
Loopback wrote:
Тестировал, в данном конкретном случае?
В данном нет, т. к. объяснял, почему тут сие не канает.

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

#43:  Author: Loopback PostPosted: Tue Jun 16, 2020 16:41
    —
Flasher wrote:
В комбобоксе — нет, там пусто


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

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

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


Вот как это можно было понять? "Вижу ANSI", "ANSI появляется" - значит вроде как в вариантах выбора. А там его нет. Проблема не в определении юникода в именах, а в не установленной в этом случае целевой кодировке.

#44:  Author: FlasherLocation: Москва PostPosted: Tue Jun 16, 2020 16:48
    —
Loopback wrote:
значит вроде как в вариантах выбора.
Я смотрел на выделенное слева от комбобокса со стрелочным указателем и пустое поле. Понял это так, что раз ANSI нет в комбобоксе, то она и идёт умолчательной.

Loopback wrote:
Проблема не в определении юникода в именах, а в не установленной в этом случае целевой кодировке.
Не только неустановленной, но и несохраняемой. Ты же это мог и без меня заметить, не правда ли? Wink

#45:  Author: Loopback PostPosted: Tue Jun 16, 2020 21:48
    —
Flasher
Кто-то мог бы заметить, кто-то мог бы чуть точнее описывать проблему...

Так или иначе, исправил. Флаг MCE_DISABLE_SINGLEEDIT для отключения пофайлового редактора добавил. Лежит тут.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Page 3 of 9

Powered by phpBB © 2001, 2005 phpBB Group