powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / массовый поиск подстрок в строке
18 сообщений из 118, страница 5 из 5
массовый поиск подстрок в строке
    #39951002
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Код: c#
1.
2.
3.
4.
5.
        static Regex idMatch = new Regex("\\[[^\\]]+\\](\\.\\[[^\\]]+\\])+", RegexOptions.Compiled);

            var MDX_upper = query.MDX.ToUpper();
            var ids = idMatch.Matches(MDX_upper).Cast<Match>().Select(m => m.Value).Distinct().ToArray();
            var text = string.Join(",", ids); // ВОТ ЭТО УЖЕ ЛИШНЕЕ

и осталось перед этим сделать
Код: plaintext
1.
var searchset = new HashSet<String>();
foreach (var s in SearchStrings) searchset.Add(s.ToUpper());

а после этого -
Код: plaintext
foreach (var id in ids) if (searchset.Contains(id)) return id; 

и убедиться, что ваш LINQ .Cast<Match>().Select(m => m.Value).Distinct().ToArray() не тормозит
а то, может быть, оставить от этого только
Код: plaintext
var ids = idMatch.Matches(MDX_upper);
и потом
Код: plaintext
foreach (var id in ids) if (searchset.Contains(id.Value)) return id.Value; 
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951025
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но если поиск лучше прерывать первом совпадении, то так:
Код: c#
1.
2.
3.
4.
Match match = idMatch.Match(MDX_upper);
while (match.Success && !searchset.Contains(match.Value))
    match = match.NextMatch();
return match.Success ? match.Value : ""; // "" - ничего не нашли
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951053
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron
a_voronin
Вы думаете в C++ или TurboPascal не было ByCode. Или его не было в Фортране и PL/1.

И да, я так думаю. Покажите мне bytecode в C++?


Что вы понимаете под словом "покажи"? Компилятор его в памяти у себя формирует и никуда не сохраняет. Это .NET и JAVA его специально сохраняют. А на иных компиляторах его не сохраняли никуда.

По любому есть такой этап, как сопоставление кодов неких условных конструкций с кодами процессорных команд. Этот этап присуствет в любой компиляции.

Вот здесь например, упоминается некий object code для с++ между компилятором и линковкой.

http://courses.washington.edu/css342/zander/css332/arch.html
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951056
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
mikron
пропущено...

И да, я так думаю. Покажите мне bytecode в C++?


Что вы понимаете под словом "покажи"? Компилятор его в памяти у себя формирует и никуда не сохраняет. Это .NET и JAVA его специально сохраняют. А на иных компиляторах его не сохраняли никуда.

По любому есть такой этап, как сопоставление кодов неких условных конструкций с кодами процессорных команд. Этот этап присуствет в любой компиляции.

Вот здесь например, упоминается некий object code для с++ между компилятором и линковкой.

http://courses.washington.edu/css342/zander/css332/arch.html

Ты спутал байт-код с AST.

Хотя ты близок к правде. Если-б говорил про Clang.
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951059
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А байткод java - вообще не в кассу. Он - для стековой машины а не для регистровой.
Как калькулятор МК-61. Понимаешь?
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951067
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой смысл вообще теребить вопрос ассемблера в этом разделе?
если, не жить, не быть, надо на C++ сделать, напишите библиотеку на C++, сделайте импорт и используйте на здоровье.
вся эта возня на порядок повысит сложность проекта и его сопровождение, надо будет поддерживать такой код для всех поддерживаемых архитектур и отладка будет не такой уж тривиальной, думаю ваши коллеги это не оценят.
есть куча решения для полнотекстового поиска в базах, в памяти и где угодно еще, вместо того, чтоб потратить кучу часов на изобретения очередного самоката с квадратными колёсами, лучше бы потратили время на поиск готовых решений.
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951069
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
a_voronin
пропущено...


Что вы понимаете под словом "покажи"? Компилятор его в памяти у себя формирует и никуда не сохраняет. Это .NET и JAVA его специально сохраняют. А на иных компиляторах его не сохраняли никуда.

По любому есть такой этап, как сопоставление кодов неких условных конструкций с кодами процессорных команд. Этот этап присуствет в любой компиляции.

Вот здесь например, упоминается некий object code для с++ между компилятором и линковкой.

http://courses.washington.edu/css342/zander/css332/arch.html

Ты спутал байт-код с AST.

Хотя ты близок к правде. Если-б говорил про Clang.


Нет, это ты плохо текст прочитал

The source code is translated into object code, which is similar in nature to byte code.

Создание байт кода это этап любой компиляции. Называть его могут по разному. Но когда исходники разбираются по AST, то формируемые при этом данные и есть байткод, не зависимо от того, как его называют. MSIL OBJECT CODE и т.д. Уже потом байт код и сопоставляется с командами CPU. Именно на этом этапе преобразования и вылавливаются паттерны, которые могут быть преобразованы в более оптимальные команды (оптимизация).
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951075
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1G


и убедиться, что ваш LINQ .Cast<Match>().Select(m => m.Value).Distinct().ToArray() не тормозит
а то, может быть, оставить от этого только


Ключевым здесь является Distinct(), именно ради него вся конструкция и напридумана.
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951078
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

Object Code и ByteCode имеют одно принципиальное отличие: byte code выполнятся в виртуальной машине.

ПС. Хватит уже упрямого мальчишества. скучно.
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951081
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
mayton
пропущено...

Ты спутал байт-код с AST.

Хотя ты близок к правде. Если-б говорил про Clang.


Нет, это ты плохо текст прочитал

The source code is translated into object code, which is similar in nature to byte code.


Это просто прекрасно. Я имею в виду "which is similar in nature to byte code."

Это знаешь... как Бог создал Адама по образу и подобию. Или как Рабинович напевал Шаляпина.

Я думаю что если-бы ты изучал JVM-specs, то у тебя не возникло-бы желания проводить
параллели между байткодом JVM, и object code их С++. Уверяю тебя. Это очень разные
вещи.

Но мы отвлеклись. Я надеюсь ты согласен, что в оптимизации производительности
как и в любой другой науке есть некий алгоритм или последовательность.
Написание прототипа по готовому алгоритму. Симуляция нагрузки
Анализ узких мест (боттлнек или хотспот). И уже после этого идут различного рода
предположения. Что если данный метод переписать с Python на С++ или на Ассемблер
то мы выиграем в перформансе там... +30% к примеру.

Ты согласен с таким подходом?
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951083
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
a_voronin
Потому что C++ компилятор может превратить for(int i = 0; i < 100; i++) a[i] = 6; в три команды загрузки регистров и команду rep stosd , а MSIL компилятор будет делать условный переход. При этом задача решаемая.

Так может наконец взять в руки С++, раз там всё так хорошо, и перестать есть кактус?


полумеры, АСМ
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951098
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bach
Сон Веры Павловны
пропущено...

Так может наконец взять в руки С++, раз там всё так хорошо, и перестать есть кактус?


полумеры, АСМ


Я как-то 10 лет назад решил переписать кусок кода с C++ на ассемблер. Простой код -- цикл в цикле там был с несколькими сложениями.

Каково было мое удивление, когда я обнаружил, что написанный мной на ассемблере код, работает медленнее того, что выдал компилятор с++. раза в 2. Стал смотреть -- он выдал ровно тоже команды, что и я написал, но задействовал другие регистры.

так что не факт, что прямой АСМ даст лучший результат, чем С++.
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951148
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Ключевым здесь является Distinct(), именно ради него вся конструкция и напридумана.
тогда я бы еще попробовал так:
Код: c#
1.
2.
var idset = new HashSet<String>();
foreach (var match in idMatch.Matches(MDX_upper)) idset.Add(match.Value.ToUpper()); //в idset окажутся уникальные


остаётся найти пересечение двух HashSet - должно быть жутко быстрым (сравниваются в основном уже готовые хэш-суммы), но я не уверен, что HashSet.IntersectWith(IEnumerable) оптимизирован для случая, что параметром будет второй HashSet.
тогда, наверное, idset.IntersectWith(searchset) будет быстрее, чем наоборот searchset.IntersectWith(idset)
(но не быстрее, чем просто idset.IntersectWith(SearchStringsListOrArray) - ради интереса я бы проверил все варианты)
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951168
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если предположить что один из хеш-сетов - константа то задача интерсекта
просто сводится к отслеживанию пересечения в фазе формирования второго
хешсета.

Тоесть мы по сути делаем спред тяжелой операции на набор мелких в итерации
когда большая хештаблица наполняется. А наполняется она обычно из файла или
из сокета или из БД а там требования к скорости ослаблены в 1000 раз примерно.

Это похоже на шаблон CQRS
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951171
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
я бы параллелил вызовы функции поиска набора строк в 1 большой строке (вкупе с загрузкой этих больших строк)
т.е. внутри самой функции (поиска набора строк в 1 большой строке) что-то параллелить не вижу смысла в данном конкретном случае
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951236
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тоесть мы по сути делаем спред тяжелой операции на набор мелких в итерации
когда большая хештаблица наполняется. А наполняется она обычно из файла или
из сокета или из БД а там требования к скорости ослаблены в 1000 раз примерно.

Это похоже на шаблон CQRS


О_о
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951247
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
L1G


и убедиться, что ваш LINQ .Cast<Match>().Select(m => m.Value).Distinct().ToArray() не тормозит
а то, может быть, оставить от этого только


Ключевым здесь является Distinct(), именно ради него вся конструкция и напридумана.

бред какой-то.
Оправдать можно только временем, потраченным на разглядывание ассемблера.
Обидно же будет, если, к несчастью, вдруг заработает быстрее 30 секунд, вместо правильных трёх минут.
....
...
Рейтинг: 0 / 0
массовый поиск подстрок в строке
    #39951259
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1G,

Тут нужен эксперимент. Если мы 1 потоком утилизируем канал памяти то запуск 2,3,4 потока уже не даёт эффекта.
...
Рейтинг: 0 / 0
18 сообщений из 118, страница 5 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / массовый поиск подстрок в строке
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]