Какой из них целесообразен для очистки строителя строк? - PullRequest
3 голосов
/ 23 января 2012

Q:

Какой из них целесообразен с точки зрения производительности: очистить построитель строк

AStringBuilder.Remove(0,AStringBuilder.Length);

string theString = AStringBuilder.ToString();
ABuilder.Replace(theString,String.Empty);

AStringBuilder.Length = 0;

Примечание: Я использую Framework 3.5, который не содержит Clear() метод.

Ответы [ 3 ]

7 голосов
/ 23 января 2012

Обновление Оказывается, вы используете .net 3.5 и Clear был добавлен в .net 4. Поэтому вам следует использовать Length = 0.На самом деле, я бы, вероятно, добавил для этого метод расширения с именем Clear, так как, на мой взгляд, он гораздо более читабелен, чем Length = 0.


. Я бы не использовал ни один из них и вместо этого вызвал быClear.

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

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

Если выполнение очистки объекта на самом деле является узким местом, тогда вам потребуется время, чтобы код знал, какой вариант быстрее.При оценке производительности никогда не существует реальной альтернативы бенчмаркингу.

1 голос
/ 23 января 2012

Поскольку Clear() недоступен для вас, я думаю, что установка нулевой длины выполняется быстрее. Некоторые тесты

Еще одна ссылка с SO

1 голос
/ 23 января 2012

До .NET 4: Как упоминает Дэвид Хеффернан, используйте Length = 0;

В .NET 4: Другой вариант: StringBuilder.clear();

http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.clear.aspx

...