Я только что опубликовал это в похожей теме, но, возможно, это более уместно здесь.
Я выполняю аналогичный поиск, в основном ищу ключевые слова длиной около 10-50 байт в тексте размером примерно 45 тыс. Байт. Я ищу около 1900 ключевых слов по девяти миллионам текстов, поэтому как можно быстрее добиться этого также схожий приоритет.
Итак, самый быстрый метод, который я нашел, используя .NET 4 - это параллельное Regex IsMatch.
Вот пример получения общего количества совпадений -
needles.AsParallel ( ).Sum ( l => Regex.IsMatch ( haystack , Regex.Escape ( l ) ) ? 1 : 0 );
Это работает для моего сценария (выше), он на 55% быстрее порядкового индекса параллельных сравнений в моих тестах, по крайней мере, для того размера данных, который я использую. Я также представляю, что повышение скорости происходит только при использовании многоядерных машин.
Было бы интересно, если кто-нибудь может найти более быстрый метод?