2013-09-27 3 views
0

Я новичок в C#, поэтому, пожалуйста, простите мне мои ошибки.string.Replace или stringBuilder.Replace()

Я хочу заменить некоторую часть строки каждый раз, когда вызывается часть кода (2-4 раза за вызов). Мне было интересно, какой метод лучше использовать с точки зрения производительности: string.Replace или stringBuilder.Replace()?

Что делать, если этот кусок кода называется 10.000 раз одновременно?

+6

Если у вас есть 'StringBuilder', используйте' StringBuilder.Replace', если вы используете 'String'' String.Replace'. Так что в основном вы спрашиваете, что быстрее, 'String' или' StringBuilder'. Это зависит, измерьте его самостоятельно. Сначала напишите четкий и читаемый код и оптимизируйте его позже, если вам действительно нужно. –

+0

Знайте, этот два метода «Заменить» использует разные классы. Итак .. –

+0

Возможный дубликат [Is StringBuilder.Replace() более эффективен, чем String.Replace?] (Http://stackoverflow.com/questions/287842/is-stringbuilder-replace-more-efficient-than-string-replace) –

ответ

2

Используйте String.Replace() после того, как ваша строка будет выполнена, она заменит сразу все места. Было бы лучше, если бы вы объяснили свой сценарий в каком-то примере.

Посмотрите на этой ссылку у него есть хорошее описание: Comparing RegEx.Replace, String.Replace and StringBuilder.Replace – Which has better performance?

3

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

Сказав, что - строки C# immutable, что означает, что вы не можете изменить их после их создания. Когда вы вызываете String.Replace, среда выполнения должна создать новый экземпляр String для результата. Это означает, что последовательность изменений в одной и той же строке будет медленной, так как среда выполнения должна создать новый объект для каждой манипуляции, распределяя память и копируя строковые данные каждый раз.

StringBuilder был специально разработан как изменяемая строка для такого типа ситуаций - чтобы избежать создания нового экземпляра String для каждой манипуляции.

Так что StringBuilder почти наверняка будет быстрее, если вы выполните последовательность вызовов Replace в той же строке.

0

String Замена отличается от StringBuilder Заменить. Но на поверхности они одинаковы. StringBuilder - это просто оптимизация, но, учитывая распространенность использования строк, это критически важно. String.Replace всегда создает новую строку - StringBuilder.Replace нет.

Смежные вопросы