Альтернативы String.Compare для производительности - PullRequest
3 голосов
/ 08 августа 2011

Я использовал профилировщик в своем приложении на C # и понял, что String.Compare () отнимает много времени в целом: 43% общего времени с 124M хитов

Я сравниваю сравнительно небольшую строку: от 4 до 50 символов.Чем бы вы порекомендовали заменить его с точки зрения производительности ??

UPD: Мне нужно только решить, являются ли 2 строки одинаковыми или нет.Строки могут быть нулевыми или "".Никакой культурный аспект или любой другой аспект к этому.Большую часть времени это будет "4578D" по сравнению с "1235E" или подобным.

Большое спасибо заранее!

Ответы [ 2 ]

4 голосов
/ 08 августа 2011

Это зависит от того, какое сравнение вы хотите сделать. Если вас интересует только равенство, используйте одну из перегрузок Equals - например, быстрее обнаружить, что две строки имеют разную длину, чем сравнивать их содержимое.

Если вы довольны порядковым сравнением, явно укажите, что:

int result = string.CompareOrdinal(x, y);

Порядковое сравнение может быть намного быстрее, чем культурно-чувствительное.

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

РЕДАКТИРОВАТЬ: Хорошо, так что вы только хотите проверить на равенство. Я бы просто использовал оператор ==, который использует сравнение по порядковому равенству.

1 голос
/ 08 августа 2011

Вы можете использовать различные способы сравнения строк.

String.Compare(str1, str2, StringComparison.CurrentCulture) // default
String,Compare(str1, str2, StringComparison.Ordinal) // fastest

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

Если вы производите сравнение дляравенства, и строки не содержат никаких зависимых от культуры символов, вы можете очень хорошо использовать порядковое сравнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...