Open Source - Unicode Far

Хотите говорить о Far и не знаете, куда обратиться?
User avatar
zg
zero-gravity
Posts: 5189
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 40 times
Contact:

Re: Open Source - Unicode Far

Postby zg » Fri 15 May, 2009 16:21

Latest post of the previous page:

John Doe wrote:А что может быть поломано в системе? Куда рыть дальше?
ну там все эти кучи открытий плагинов — это получение атрибута файла. по нормальному, оно всё кэшируется и должно работать быстро.
у тебя либо памяти мало. либо кто-то хучит операции с файлами.

User avatar
Andrey Budko
Posts: 1204
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Open Source - Unicode Far

Postby Andrey Budko » Sat 16 May, 2009 05:00

Глянул профайлером.

Скриншот загрузки фара с 30ю плагинами (без FrameManager->EnterMainLoop)
http://prboom-plus.sourceforge.net/far_before.png

Изменил в двух местах.

1. Казалось бы тупейшая функция MkKeyName(), которая просто складывает две строки и сует слеш между ними, как видно с рисунка, отжирает треть от всего времени загрузки. В подавляющем большинстве случаев она вызывается из OpenRegKey(), а внутри себя всырается на операторах + и =. Заменил тормозной класс UnicodeString на нэйтивный wchat_t, уменьшив этим суммарное время выполнения OpenRegKey() с 1.7 секунды (40%) до 34 милисекунд (1.5%). Менял только в OpenRegKey(), так как в остальных местах пох, а делать универсально ради проверки было лень.

2. KeyNameToKey() жрет 15% времени. Вообще загрузка макросов отжирает половину от общего времени загрузки. Это учитывая то, что макросов у меня в сумме 20 и все элементарные вида Esc = CtrlO. Несчастные 30 плагинов сожрали всего 8% от загрузки фара. Добавил в KeyNameToKey() перед вызовом CompareStringW проверку на длину, тем более что вычислять её не надо. Жалко что практически не помогло :) Там, кстати, небольшую ошибку заметил. Если у клавиши в реестре по неизвестным причинам будет двойной модификатор, например AltAltAdd, то ReplaceStrings(..-1..) удалит оба вхождения Alt, а следующая строчка (Pos+=ModifKeyName[I].Len) спозиционирует указатель неправильно.

После этих двух изменений стало так:
http://prboom-plus.sourceforge.net/far_after.png

Общее время загрузки фара по профайлеру сократилось почти в два раза. Хз как оно на самом деле. Графики на картинках отсортированы по колонке "The percentage of time spent in this function and its children"

Изменения тут:
http://pastebin.com/mfb0232a

Еще не смог понять, зачем фар при загрузке плагинов сортирует список после добавления каждого, а не один раз в конце?

User avatar
t-rex
Страшный и ужасный
Posts: 4871
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Contact:

Re: Open Source - Unicode Far

Postby t-rex » Sat 16 May, 2009 09:06

Проверь вот это:
http://pastebin.com/m21aa7b59
Это в общем должно быть тоже самое что сделал ты но в 2 строчки.

Andrey Budko wrote:Еще не смог понять, зачем фар при загрузке плагинов сортирует список после добавления каждого, а не один раз в конце?

Тут вопрос не правильный, надо спрашивать почему в GetPlugin нет бинарного поиска если список то постоянно отсортированный.

User avatar
Andrey Budko
Posts: 1204
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Open Source - Unicode Far

Postby Andrey Budko » Sat 16 May, 2009 10:40

t-rex wrote:Проверь вот это:
http://pastebin.com/m21aa7b59
Это в общем должно быть тоже самое что сделал ты но в 2 строчки.

Конкретно это - не очень. Время затрачиваемое на OpenRegKey() уменьшилось до 10% с 40%, а вот тот патч который ты мне дал только что в ICQ - вот он работает - 1.4%

User avatar
Skirda
Posts: 3473
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: Open Source - Unicode Far

Postby Skirda » Thu 21 May, 2009 11:33

Andrey Budko wrote:2. KeyNameToKey()... Там, кстати, небольшую ошибку заметил. Если у клавиши в реестре по неизвестным причинам будет двойной модификатор, например AltAltAdd, то ReplaceStrings(..-1..) удалит оба вхождения Alt, а следующая строчка (Pos+=ModifKeyName[I].Len) спозиционирует указатель неправильно.

попробуй вот так:

Code: Select all

Index: keyboard.cpp
===================================================================
--- keyboard.cpp   (revision 2960)
+++ keyboard.cpp   (working copy)
@@ -1579,9 +1579,9 @@
       {
          if(StrStrI(strTmpName,ModifKeyName[I].Name) && !(Key&ModifKeyName[I].Key))
          {
-            ReplaceStrings(strTmpName,ModifKeyName[I].Name,L"",-1,TRUE);
+            int CntRepl=ReplaceStrings(strTmpName,ModifKeyName[I].Name,L"",-1,TRUE);
             Key|=ModifKeyName[I].Key;
-            Pos+=ModifKeyName[I].Len;
+            Pos+=ModifKeyName[I].Len*CntRepl;
          }
       }
    //Pos=strlen(TmpName);
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Andrey Budko
Posts: 1204
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Open Source - Unicode Far

Postby Andrey Budko » Thu 21 May, 2009 11:46

Skirda wrote:попробуй вот так

Еще StrStrI не помешает заменить на StrStr, предварительно приведя к одному регистру (в списке модификаторов - статически). А еще лучше - закешировать как-то просчитанные числовые значения кнопкосочетаний, хотя и не особо понятно как это сделать прозрачно. Для вызывающей клавиши можно, например, втупую в скобочках дописывать CtrlAltUp (0x12345678), но это грубо. Сам секвенс сейчас как-то кешируется или каждый раз при старте парсится абсолютно все?

User avatar
Skirda
Posts: 3473
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: Open Source - Unicode Far

Postby Skirda » Thu 21 May, 2009 12:36

Andrey Budko wrote:Еще StrStrI не помешает заменить на StrStr, предварительно приведя к одному регистру (в списке модификаторов - статически).

Ок.

Andrey Budko wrote:Сам секвенс сейчас как-то кешируется или каждый раз при старте парсится абсолютно все?

второе.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Skirda
Posts: 3473
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: Open Source - Unicode Far

Postby Skirda » Thu 21 May, 2009 12:38

А... не. привести к одному регистру влоб не пойдет т.к. и FKeys1 и ModifKeyName юзаются так же в KeyToText(). Разве что держать второй массив....
We are the Borg. You will be assimilated.
So Say We All!

User avatar
Andrey Budko
Posts: 1204
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Open Source - Unicode Far

Postby Andrey Budko » Thu 21 May, 2009 12:40

Skirda wrote:Разве что держать второй массив....

Ну я имел в виду добавить еще одно поле в структуру и заполнить либо руками либо при старте

User avatar
Skirda
Posts: 3473
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: Open Source - Unicode Far

Postby Skirda » Thu 21 May, 2009 13:17

добавлю поле...
We are the Borg. You will be assimilated.
So Say We All!

mi3antrop
Posts: 49
Joined: Tue 15 Nov, 2005 18:31
Contact:

Re: Open Source - Unicode Far

Postby mi3antrop » Mon 25 May, 2009 09:16

В far2 перестала работать такая вот раскраска файлов

Подсвечивает фон свежих файлов.
Если галку "продолжить обработку" снять - работает. Только смысл отпадает.
Может у каких-то настроек поменялся смысл, но в документации и по форуму не нашёл.

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Re: Open Source - Unicode Far

Postby John Doe » Tue 02 Jun, 2009 14:25

По поводу папок и файлов, оканчивающихся точкой

alexandr_v wrote:Из последнего SDK, статья "Naming a File"
"
Do not end a file or directory name with a trailing space or a period. Although the underlying file system may support such names, the operating system does not. You can start a name with a period (.).
".

Может надо запретить создавать каталоги с точкой в конце?
Explorer не дает создать такой каталог.


Тикет уже как бы закрыт, а проблема осталась.

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

User avatar
DrKnS
Posts: 4434
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 101 times
Contact:

Re: Open Source - Unicode Far

Postby DrKnS » Tue 02 Jun, 2009 16:32

Никаких проблем.

Создал случайно - осознанно переименуй или удали.

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Re: Open Source - Unicode Far

Postby John Doe » Tue 02 Jun, 2009 16:52

Создал случайно. Заметил не сразу. А то и вовсе не заметил.
А проблемы с этими файлами/папками вообще могут быть потом у кого-то другого...

Неправильно создавать то с чем потом сам не сможешь работать. И MS не рекомендует.

/>



User avatar
DrKnS
Posts: 4434
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 101 times
Contact:

Re: Open Source - Unicode Far

Postby DrKnS » Tue 02 Jun, 2009 17:03

Неправильно создавать то с чем потом сам не сможешь работать. И MS не рекомендует.

Неправильно - вот и не создавай.
Фар есть инструмент, а не нянька.

User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Re: Open Source - Unicode Far

Postby John Doe » Tue 02 Jun, 2009 17:08

(с) Фар есть инструмент, а не нянька.

Это хоть прямо в подпись ставь :D

Ну а серьёзно: нафига этот инструмент создаёт то с чем сам не может работать как следует?

/>



User avatar
John Doe
Бюрократ
Posts: 11029
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 61 times

Re: Open Source - Unicode Far

Postby John Doe » Tue 02 Jun, 2009 17:13

Впрочем ну его...

Я и забыл - фар ведь ещё и не то может:
Например легко создать файл con и директорию nul (правда войти в неё не получится)

Прямо целый арсенал малолетнего вредителя :)

Удивительно ещё почему нельзя создавать файлы/директории оканчивающиеся на пробелы
Update:
Я погорячился. Оказывается файлы можно!

/>




Return to “Обсуждение Far Manager”

Who is online

Users browsing this forum: No registered users and 1 guest