Могу ли я настроить IndexOf selection?

Я уже давно профилировал приложение

Оказывается, что большая часть процессора используется функцией IndexOf

Здесь функция

public static string func_Fix_Google_Source(string srSource)
{
    int irIndex = srSource.IndexOf("<div id=\"gt-form-c\">");
    return srSource.Substring(irIndex);
}

Длина строки будет иметь значение? Я могу сократить длину строки поиска

2 ответа

Решение

Если поиск по подстроке становится узким местом, вы можете переключиться на расширенный алгоритм, такой как KMP.

Поиск строки по умолчанию может быть очень дорогим, когда у вас много "ложных срабатываний", например, много

<div id="...

в тексте ищется.

Каждый раз, когда вышеуказанный префикс обнаруживается в позиции, где совпадение не начинается, алгоритм по умолчанию следует ему столько, сколько требуется для подтверждения отсутствия совпадения, а затем переходит к следующей позиции. В отличие от этого, KMP пропускает много символов, которые он уже видел, повышая эффективность.

В дополнение к улучшению способа поиска, который, как кажется, вы уже сделали, следуя вашим комментариям, перегрузка IndexOf(строка) использует текущую культуру для своих сравнений.

Использование перегрузки StringComparision для обычного поиска даст лучшую производительность. В зависимости от того, что вы делаете ~8x.

int irIndex = srSource.IndexOf("<div id=\"gt-form-c\">", StringComparison.Ordinal);
Другие вопросы по тегам