В чем смысл RECTL_OPTIMIZE?
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
-
- Posts: 6819
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Re: В чем смысл RECTL_OPTIMIZE?
Смысл в том, чтобы ускорить последующие операции поиска или сопоставления.Max Rusov wrote:RECTL_OPTIMIZE - когда ее нужно вызывать?
Ниже приведена функция из LuaFAR, где я пытался использовать RECTL_OPTIMIZE.
Только для информации, т.к. не углублялся в эту область.
-
- Posts: 3651
- Joined: Wed 23 Nov, 2005 11:11
- Location: Москва-Питер
- Has thanked: 2 times
- Been thanked: 19 times
Re: В чем смысл RECTL_OPTIMIZE?
Как я понимаю, это имеет смысл, если я создаю один regexp и много раз делаю Search/Match?
Имеет ли это смысл для любых регулярных выражений, или только для некоторых - особо навороченных?...
Имеет ли это смысл для любых регулярных выражений, или только для некоторых - особо навороченных?...
- 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?
по идеи оно надо всегда, это ускоряет откидывание совсем не подходящих строк и проход по строке в некоторых случаях.
скажем для .* оно ничего не даёт, но для всех других да.
скажем для .* оно ничего не даёт, но для всех других да.
-
- Posts: 6819
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Re: В чем смысл RECTL_OPTIMIZE?
Вообще, интересный подход. Без измерений, всё на пальцах, давайте включим.DrKnS wrote:Так давайте его тогда по умолчанию включим.t-rex wrote:по идеи оно надо всегда
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: В чем смысл RECTL_OPTIMIZE?
Вы так нервничаете, как будто кто-то уже пошёл и включил.
Но не вопрос.
В pathmix.cpp есть массив PathTypes[] с шестью вроде как не совсем тривиальными регексами.
Я его скомпилил миллион раз.
6 миллионов вызовов RegExp::Optimize() заняли около 20 мс, т. е. 3-4 мкс на вызов.
А все вместе, для сравнения — секунд 25.
Но не вопрос.
В pathmix.cpp есть массив PathTypes[] с шестью вроде как не совсем тривиальными регексами.
Я его скомпилил миллион раз.
6 миллионов вызовов RegExp::Optimize() заняли около 20 мс, т. е. 3-4 мкс на вызов.
А все вместе, для сравнения — секунд 25.
-
- Posts: 6819
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Re: В чем смысл RECTL_OPTIMIZE?
С чего это вы сделали такой неожиданный вывод? Я и не думал нервничать.DrKnS wrote:Вы так нервничаете, как будто кто-то уже пошёл и включил.
20 мс / 6 миллионов - это вроде 3-4 наносекунды на вызов. Что-то не стыкуется.DrKnS wrote:6 миллионов вызовов RegExp::Optimize() заняли около 20 мс, т. е. 3-4 мкс на вызов.
А все вместе, для сравнения — секунд 25.
У меня в своё время (несколько лет назад) результаты были совсем иные (возможно, завтра посмотрю).
И ещё дело в том, что не всегда нужно матчить миллионы раз в цикле. Очень часто регекс применяется однократно, при этом операция оптимизации может увеличить время исполнения в несколько раз.
В любом случае, какой бы ни был вариант умолчания, последнее слово должно оставаться за плагином, то-есть плагин должен иметь возможность указать, чтобы оптимизация не вызывалась.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: В чем смысл RECTL_OPTIMIZE?
Думал об одном, писал другое.Shmuel wrote:20 мс / 6 миллионов - это вроде 3-4 наносекунды на вызов. Что-то не стыкуется.
"заняли около 2 с, т. е. 0.3-0.4 мкс на вызов."
- John Doe
- Бюрократ
- Posts: 13807
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 426 times
- Contact:
В чем смысл RECTL_OPTIMIZE?
Что тут понимается под удачной оптимизацией?http://api.farmanager.com/ru/service_functions/regexpcontrol.html wrote:Функция возвращает TRUE при удачной оптимизации
Нормально ли то что функция возвращает 0?
Попробовал на нескольких регэкспах, возврата другого значения добиться не удалось (сами регэкспы рабочие)
Update: видимо не все регэкспы поддаются оптимизации.