Какой конструктор я должен использовать для класса StringBuilder? - PullRequest
1 голос
/ 20 декабря 2010

Я строю большую строку из списка предметов.Каждый элемент генерирует строку длиной примерно 200 символов (плюс или минус 100%).

Получу ли я (заметное) преимущество в производительности при использовании

Dim sb = New StringBuilder(averageCharacterCount * items.Count)

вместо

Dim sb = New StringBuilder()

, даже если указанная емкость является лишь предположением?

Ответы [ 5 ]

4 голосов
/ 20 декабря 2010

Я бы предположил первое, потому что это поможет минимизировать перераспределение, но я бы предположил, что разница минимальна (мы называем это « микрооптимизация »), поскольку это вряд ли будет узким местом. Но только вы можете ответить, что определенно даст вам лучшую производительность в зависимости от вашего конкретного варианта использования. Если вы действительно хотите знать, напишите код в обоих направлениях, измерьте производительность каждого из них, и вы получите окончательный ответ.

2 голосов
/ 20 декабря 2010

Начиная с правильного шара, вы сэкономите несколько перераспределений / копий, но учтите, что, поскольку это алгоритм удвоения, он достаточно быстро приблизится к размеру. Если он находится в пределах 100%, это только еще одно перераспределение / копирование в худшем случае, так что да - запуск с этим подходом поможет немного .

Но во многих отношениях это микрооптимизация; вы уже делаете это правильно, поэтому если наше профилирование не покажет, что это все еще узкое место (и поэтому вам нужно выжать последние несколько циклов), забудьте об этом и переходите к следующему.

0 голосов
/ 21 декабря 2010

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

0 голосов
/ 20 декабря 2010

Если это не единственное, что делает ваше приложение, вы этого не заметите.

0 голосов
/ 20 декабря 2010

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

...