Является ли isprefix более дорогим, чем сравнение двух строк в C #? - PullRequest
1 голос
/ 05 апреля 2009

Я делаю некоторые расчеты сравнения двух строк. Если я знаю, что они имеют одинаковую длину, стоит ли вызывать isprefix или If ("string" == "string")?

Ответы [ 2 ]

6 голосов
/ 05 апреля 2009

Почему бы не проверить? Достаточно просто использовать класс StopWatch для сравнения, включая строки различной длины и различные параметры сравнения.

Я бы не ожидал существенной разницы в ядре, поскольку IsPrefix по существу:

public bool IsPrefix(string comp, string prefix) {
  return Compare(comp, 0, prefix.Length, prefix, 0, prefix.Length);
}

Однако может существовать разница между оператором String == и классом CompareInfo из-за примененного уровня I18N.

В конце вам нужно будет измерить, но я ожидаю, что в 99% случаев любая разница не имеет существенного значения для общей производительности приложения.

1 голос
/ 05 апреля 2009

Я бы предположил, что оператор равенства фактически сравнивал значения хеш-функции двух строк, а не фактический контент (по крайней мере, как отказоустойчивый)

Поскольку сопоставление префиксов потребует создания подстроки перед сравнением хеш-значений, из этого следует, что сопоставление префиксов должно быть намного медленнее, чем сопоставление с полным равенством.

Если у вас достаточно строк, которым нужно сопоставить префикс, вы должны изучить реализацию структуры TRIE (http://paste.lisp.org/display/12161)

...