Глядя на декомпилированный код для Contains()
, он просто вызывает IndexOf()
с StringComparison.Ordinal
, поэтому я бы сказал, что IndexOf()
наиболее эффективен (очень маленьким волоском), если его использовать в том жеспособ (обычный), поскольку он имеет на один вызов меньше метода, но Contains()
более читабелен и, следовательно, более удобен для обслуживания ...
public bool Contains(string value)
{
return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}
Как и во всех вещах, я бы пошел с тем, что является более читабельным и обслуживаемымзатем расщепление волос на производительность.Микрооптимизация выполняется только тогда, когда вы знаете, что на данный момент существует узкое место.
ОБНОВЛЕНИЕ : более 1 000 000 итераций:
- Содержит (значение) - заняло 130 мс
- IndexOf (значение, StringComparison.Ordinal) - заняло 128 мс
Итак, как вы можете видеть, ОЧЕНЬ, ОЧЕНЬ ОДНО.Еще раз, перейдите к тому, что более легко обслуживаемо.
ОБНОВЛЕНИЕ 2 : Если ваш код всегда представляет собой один символ (а не строку из 1 символа), IndexOf () работает быстрее:
- Содержит (значение символа) - заняло 94 мс
- IndexOf (значение символа) - заняло 16 мс
Если вы знаете, что ваши коды символов - это всегда один символ, это примерно на порядок быстрее для использования IndexOf()
с аргументом char.
Это потому, что Contains(char value)
- это метод расширения из IEnumerable<T>
, а не метод первого класса string
.
Но еще раз ~ 100 мс на 1 000 000 итераций действительно, действительно, весьма незначительны.