Я использую C# для непрерывного поиска нескольких «ключевых слов» строк в больших строках, которые составляют = = 4kb. Этот код постоянно зацикливается, и сон не снижает производительность процессора, сохраняя при этом разумную скорость. Bog-down - это метод сопоставления ключевых слов.C#: эффективно искать большую строку для вхождений других строк
Я нашел несколько возможностей, и все они дают схожую эффективность.
1) http://tomasp.net/articles/ahocorasick.aspx -У меня недостаточно ключевых слов для этого, чтобы быть наиболее эффективным алгоритмом.
2) Регулярное выражение. Используя уровень экземпляра, скомпилированное регулярное выражение. -Проставляет больше функциональности, чем я требую, и не достаточно эффективности.
3) String.IndexOf. - Мне нужно сделать «умную» версию этого, чтобы обеспечить достаточную эффективность. Пересечение каждого ключевого слова и вызов IndexOf не разрезают его.
Кто-нибудь знает какие-либо алгоритмы или методы, которые я могу использовать для достижения своей цели?
gleaning информация из комментариев ниже, избежание преобразования строк и сохранение вещей в [байтовых массивах] (http://stackoverflow.com/a/283648/512671) может быть самым быстрым; и еще быстрее реализует пользовательский Boyer-Moore для байт-массивов. – zanlok