TestOne
будет быстрее, чем TestTwo
, потому что вы не создаете новое регулярное выражение для каждой итерации цикла.
Это имеет два преимущества:
- Время, используемое для разбора и построения объектов для регулярного выражения, выполняется только один раз вместо
mc.Count
раз
- Меньше нагрузки на сборку мусора, поскольку построено меньше объектов.
Однако я бы пошел еще дальше. Если вы всегда собираетесь возвращать одно и то же регулярное выражение и беспокоитесь о скорости, я бы кэшировал этот объект регулярного выражения в статическом поле.
Например, вы могли бы рассмотреть это:
private static Regex _FindNumber;
public static Regex FindNumber()
{
if (_FindNumber == null)
_FindNumber = new Regex(@"\d+", RegexOptions.IgnoreCase | RegexOptions.Compiled);
return _FindNumber;
}
Это создаст всего один объект, всего и сохранит его.
Однако, и вот мой реальный ответ.
Чтобы на самом деле узнать, какой из них будет самым быстрым, вам придется измерить ваш код, возможно, с моим вариантом, добавленным для хорошей меры, и затем принять решение. Никогда не выбирайте оптимизацию без твердых данных, вы можете потратить время на переписывание кода, что может привести к появлению новых ошибок, которые потребуют исправления, на которое вы будете тратить больше времени, только чтобы получить еще 1% производительности.
Большие оптимизации выполняются алгоритмически, как изменение типа алгоритма сортировки, и только затем, если необходимо, вы переходите к локальным оптимизациям, таким как настройка цикла.
Сказав это, я бы по крайней мере избежал создания объекта в цикле, это просто здравый смысл.