Могу ли я настроить 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);