Я также столкнулся с проблемой преобразования FastStrings, которая использовала поиск Бойера-Мура (BM), чтобы набрать некоторую скорость, для D2009 и D2010. Так как многие из моих поисков ищут только один символ, и большинство из них ищет не алфавитные символы, моя версия SmartPos для D2010 имеет версию с перегрузкой с широким символом в качестве первого аргумента и выполняет простой цикл по строке чтобы найти это. Я использую верхний регистр обоих аргументов для обработки нескольких регистров без учета регистра. Я считаю, что для моих приложений скорость этого решения сопоставима с FastStrings.
Для случая 'string find' мой первый проход состоял в том, чтобы использовать SearchBuf, использовать верхний регистр и принять штраф, но я недавно изучал возможность использования реализации Unicode BM. Как вы, наверное, знаете, BM плохо или легко масштабируется до кодировок Unicode-пропорций, но есть реализация Unicode BM на Soft Gems . Это предшествует D2009 и D2010, но выглядит так, как если бы он конвертировался довольно легко. Автор Майк Лишке (Mike Lischke) решает проблему с прописными буквами, включая таблицу прописных букв Unicode размером 67 Кб, и это может оказаться слишком большим шагом для моих скромных требований. Поскольку мои строки поиска обычно короткие (хотя и не такие короткие, как ваш единственный трехсимвольный пример), накладные расходы на Unicode BM также могут быть ценой, которую не стоит платить: преимущество BM увеличивается с длиной искомой строки.
Это определенно ситуация, когда потребуется сравнение с некоторыми реальными примерами для конкретных приложений, прежде чем включать Unicode BM в мои собственные приложения.
Редактировать: некоторые базовые тесты показывают, что я был прав, опасаясь решения "Unicode Tuned Boyer-Moore". В моей среде UTBM приводит к увеличению кода, увеличению времени. Я мог бы рассмотреть возможность его использования, если мне понадобятся некоторые дополнительные функции, предоставляемые этой реализацией (обработка суррогатов и поиск только по целым словам).