У меня есть метод замены каждого символа, кроме тех, которые я укажу. Например,
ReplaceNot("test. stop; or, not", ".;/\\".ToCharArray(), '*');
вернется
"****.*****;***,****".
Теперь, это не случай преждевременной оптимизации. Я называю этот метод довольно много раз во время работы сети. Я обнаружил, что на более длинных строках это вызывает некоторую задержку, и его удаление немного помогло. Буду признателен за любую помощь, чтобы ускорить это.
public static string ReplaceNot(this string original, char[] pattern, char replacement)
{
int index = 0;
int old = -1;
StringBuilder sb = new StringBuilder(original.Length);
while ((index = original.IndexOfAny(pattern, index)) > -1)
{
sb.Append(new string(replacement, index - old - 1));
sb.Append(original[index]);
old = index++;
}
if (original.Length - old > 1)
{
sb.Append(new string(replacement, original.Length - (old + 1)));
}
return sb.ToString();
}
Финальные #. Я также добавил тестовый пример для строки символов 3K, выполненной 100 раз вместо 1M, чтобы увидеть, насколько хорошо каждый из этих масштабов. Единственным сюрпризом было то, что регулярное выражение «масштабировалось лучше», чем другие, но это не помогает, поскольку очень медленно для начала:
User Short * 1M Long * 100K Scale
John 319 2125 6.66
Luke 360 2659 7.39
Guffa 409 2827 6.91
Mine 447 3372 7.54
DirkGently 1094 9134 8.35
Michael 1591 12785 8.04
Peter 21106 94386 4.47
Обновление: я сделал регулярное выражение для версии Питера статической переменной и установил для него RegexOptions.Compiled, чтобы быть справедливым:
User Short * 1M Long * 100K Scale
Peter 8997 74715 8.30
Вставьте ссылку на мой тестовый код, пожалуйста, исправьте меня, если это не так:
http://pastebin.com/f64f260ee