Ненужная сортировка
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ненужная сортировка
Играюсь с панельным плагином (Polygon), заметил, что после нажатия в панели на элемент .. (переход в родительскую директорию) почему-то производится ещё раз (на прощание что ли) сортировка элементов в той директории, которую покидаем. Это видно по логу, т.к. плагин экспортирует функцию CompareW.
Поскольку сортировка медленная (Lua без FFI), то на больших "папках" задержка весьма чувствительна.
Нельзя ли это полечить?
Поскольку сортировка медленная (Lua без FFI), то на больших "папках" задержка весьма чувствительна.
Нельзя ли это полечить?
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ненужная сортировка
Хорошо, может быть я ошибаюсь (не исключено).
Приложен тест-вариант плагина (требует только внешнюю sqlite3.dll). Нужно распаковать в %farhome%\plugins.
Для получения лога нужно:
1. Запустить DebugView
2. В активной панели Far выставить сортировку по расширению
3. Стать на файл test\testdb2.sqlite3
4. Вручную или макросом нажать: Enter End Enter Enter Home Enter
В логе видно, что уже после вызова export.SetDirectory("..") происходит сортировка элементов таблицы Apples, из которой выходим в родительскую папку.
Если есть желание исследовать - можно это сделать вместе, в форуме или вне его.
Приложен тест-вариант плагина (требует только внешнюю sqlite3.dll). Нужно распаковать в %farhome%\plugins.
Для получения лога нужно:
1. Запустить DebugView
2. В активной панели Far выставить сортировку по расширению
3. Стать на файл test\testdb2.sqlite3
4. Вручную или макросом нажать: Enter End Enter Enter Home Enter
В логе видно, что уже после вызова export.SetDirectory("..") происходит сортировка элементов таблицы Apples, из которой выходим в родительскую папку.
Если есть желание исследовать - можно это сделать вместе, в форуме или вне его.
- Attachments
-
- polygon-sort.7z
- (51.31 KiB) Downloaded 90 times
Last edited by Shmuel on Mon 04 Jun, 2018 01:10, edited 1 time in total.
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Ненужная сортировка
вот тут два выхода по «..».
это вызвано
panel.SetDirectoriesFirst(handle, nil, false)
в mypanel:get_panel_list.- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Ненужная сортировка
Причем в данном конкретном случае плагин меняет false на false.
Теоретически это можно оптимизировать внутри Far и не сортировать/перерисовывать, если это бессмысленно.
С другой стороны, плагин может сам проверять PFLAGS_DIRECTORIESFIRST и не делать лишних вызовов.
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ненужная сортировка
Так, картина прояснилась, большое спасибо обоим ответившим.
Сделать в плагине эту сортировку "холостой" (и, следовательно, быстрой) не проблема, но если бы можно было не вызывать эту сортировку в Фаре, было бы лучше.
На мой взгляд - бессмысленно, ведь плагин уже ответил в
SetDirectoryW
, что успешно изменил директорию.
А если (в другом сценарии) вызов окажется не лишним, то будет производиться ненужная сортировка.
Сделать в плагине эту сортировку "холостой" (и, следовательно, быстрой) не проблема, но если бы можно было не вызывать эту сортировку в Фаре, было бы лучше.
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ненужная сортировка
Ещё вариант - расширить структуру
P.S. Или добавить новые флажки прямо в существующее поле Flags.
OpenPanelInfo
, добавив новый член StartSortFlags
, где можно было бы задавать дополнительные параметры начальной сортировки. В этом случае вызов FCTL_SETDIRECTORIESFIRST
не понадобился бы.P.S. Или добавить новые флажки прямо в существующее поле Flags.
Last edited by Shmuel on Mon 04 Jun, 2018 10:39, edited 1 time in total.
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ненужная сортировка
Поскольку идея доработки структуры
Жду откликов прежде чем ломать дрова.
OpenPanelInfo
представляется мне правильной (хотелось бы услышать ещё мнения по этому вопросу), надо бы ещё это грамотно реализовать. В частности - такой вариант, как использование члена StartSortOrder
в новом качестве - как набор флагов (надо будет его переименовать в StartSortFlags
), а его младший бит для обратной совместимости использовать по прежнему назначению.Жду откликов прежде чем ломать дрова.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Ненужная сортировка
Это breaking change. Лучше просто StartSortFlags (и не забывать проверять StructSize прежде чем его читать/писать).
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ненужная сортировка
На уровне сорс-кода - да. На уровне уже скомпилированных старых бинарников, учитывая описание в Энциклопедии - нет.
Я в общем-то не настаиваю. Но эта структура и так имеет много членов, хотелось обойтись без добавления ещё одного. Может быть добавить новые флажки в Flags ?
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Ненужная сортировка
Это как?
Плагин читает из структуры intptr_t (8 байт) и трактует его как bool целиком, а не только младший бит.
Если туда добавить флажков, например 0x10|0x40|0x80, то получится 0xD0, что тоже true, несмотря на то, что в младшем бите 0.
А, её же по идее только плагин заполняет.
Если не учитывать случай "межплагинового взаимодействия" - должно работать, да.
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Ненужная сортировка
Меня бы это устроило (по крайней мере, проблема, описанная в начальном посте темы, ушла бы).