Автор: Angel_Ka
Дата сообщения: 11.05.2016 23:25
Завершается создание макроса выявления на бранч-панели файлов с одинаковыми и похожими именами — Select Duplicates FileName in Branch panel (автор Alexyz21).
Этот макрос очень быстро находит и помечает файлы с полностью совпадающими именами, т.е. полные дубликаты, дубликаты с частично совпадающими именами от их начала и дубликаты с частично совпадающими именами от концов имён файлов.
Проверено, что в ветке (бранче) из 1.8 миллионов файлов, физически содержащихся в большом множестве разветвлённых папок, данный макрос находит и помечает дубликаты файлов быстрее чем за 15 секунд.
Тогда как одна из программ "с быстрым алгоритмом поиска" рекламируется следующим образом. "Начнётся поиск дубликатов. Это может занять довольно много времени. У меня на работе на ... было 1.35 миллиона файлов. Поиск занял чуть больше 20 часов" — сказано с восторгом.
Высокая скорость работы макроса на Временной панели обеспечивается за счёт ресурсов Фара и его плагинов, главным образом за счёт постоянной оптимизации кода, обеспечения возможности создания мощных макросов на lua-платформе.
Вместе с тем, автор макроса полагает, что скорость его работы вероятно можно ещё увеличить. И может быть существенно. "В коде есть один потенциально тормозной момент, причём в цикле по всем элементам панели – ToWChar(panel.GetPanelItem(nil,1,i).FileName)" — утверждает автор.
"В этой маленькой строчке сокрыты (возможно большие, возможно не столь уж и большие) тормоза – мы получаем FullPath в Utf8, затем конвертируем его в Utf16, и получаем на эту строку указатель, чтобы можно было работать с юникодными функциями сравнения. И это помимо того, что panel.GetPanelItem(nil,1,i).FileName это конструкция LuaMacro, который сам обращается к FAR API. Потенциально быстрее было бы обращаться из скрипта к FAR API, получая указатели на FullPath в Utf16 напрямую".
"Но на практике кто его знает, будет выигрыш или нет. Однако, когда операция выполняется 1.8 миллиона раз (а существуют наборы файлов и на порядок более объёмные), то, вероятно, надо думать об оптимизации крепко" — так считает автор макроса.
Поэтому я, в свою очередь, как непосредственно заинтересованный в такой оптимизации форумчанин, обращаюсь ко всем знатокам в надежде на то, что кто-то из круга любителей Фара заинтересуется и найдёт возможность помочь оптимизировать означенный код или укажет какой-то обходной вариант.