В чем смысл RECTL_OPTIMIZE?

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

В чем смысл RECTL_OPTIMIZE?

Post by Max Rusov »

RECTL_OPTIMIZE - когда ее нужно вызывать?
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by Shmuel »

Max Rusov wrote:RECTL_OPTIMIZE - когда ее нужно вызывать?
Смысл в том, чтобы ускорить последующие операции поиска или сопоставления.
Ниже приведена функция из LuaFAR, где я пытался использовать RECTL_OPTIMIZE.
Только для информации, т.к. не углублялся в эту область.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by Max Rusov »

Как я понимаю, это имеет смысл, если я создаю один regexp и много раз делаю Search/Match?
Имеет ли это смысл для любых регулярных выражений, или только для некоторых - особо навороченных?...
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: В чем смысл RECTL_OPTIMIZE?

Post by t-rex »

по идеи оно надо всегда, это ускоряет откидывание совсем не подходящих строк и проход по строке в некоторых случаях.
скажем для .* оно ничего не даёт, но для всех других да.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by Max Rusov »

Ok, спасибо. Поэкспериментирую.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by DrKnS »

t-rex wrote:по идеи оно надо всегда
Так давайте его тогда по умолчанию включим.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by Shmuel »

DrKnS wrote:
t-rex wrote:по идеи оно надо всегда
Так давайте его тогда по умолчанию включим.
Вообще, интересный подход. Без измерений, всё на пальцах, давайте включим.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by DrKnS »

Вы так нервничаете, как будто кто-то уже пошёл и включил.

Но не вопрос.
В pathmix.cpp есть массив PathTypes[] с шестью вроде как не совсем тривиальными регексами.
Я его скомпилил миллион раз.
6 миллионов вызовов RegExp::Optimize() заняли около 20 мс, т. е. 3-4 мкс на вызов.
А все вместе, для сравнения — секунд 25.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by Shmuel »

DrKnS wrote:Вы так нервничаете, как будто кто-то уже пошёл и включил.
С чего это вы сделали такой неожиданный вывод? Я и не думал нервничать.
DrKnS wrote:6 миллионов вызовов RegExp::Optimize() заняли около 20 мс, т. е. 3-4 мкс на вызов.
А все вместе, для сравнения — секунд 25.
20 мс / 6 миллионов - это вроде 3-4 наносекунды на вызов. Что-то не стыкуется.

У меня в своё время (несколько лет назад) результаты были совсем иные (возможно, завтра посмотрю).

И ещё дело в том, что не всегда нужно матчить миллионы раз в цикле. Очень часто регекс применяется однократно, при этом операция оптимизации может увеличить время исполнения в несколько раз.

В любом случае, какой бы ни был вариант умолчания, последнее слово должно оставаться за плагином, то-есть плагин должен иметь возможность указать, чтобы оптимизация не вызывалась.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: В чем смысл RECTL_OPTIMIZE?

Post by DrKnS »

Shmuel wrote:20 мс / 6 миллионов - это вроде 3-4 наносекунды на вызов. Что-то не стыкуется.
Думал об одном, писал другое. :facepalm:

"заняли около 2 с, т. е. 0.3-0.4 мкс на вызов."
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

В чем смысл RECTL_OPTIMIZE?

Post by John Doe »

http://api.farmanager.com/ru/service_functions/regexpcontrol.html wrote:Функция возвращает TRUE при удачной оптимизации
Что тут понимается под удачной оптимизацией?
Нормально ли то что функция возвращает 0?
Попробовал на нескольких регэкспах, возврата другого значения добиться не удалось (сами регэкспы рабочие)
Update: видимо не все регэкспы поддаются оптимизации.
Post Reply

Return to “Разработка плагинов”