C# + = (плюс равняется) (Присвоение дополнением) работа очень медленного, когда строка является слишком длинной?

C:

Редактировать: На самом деле C ++, я думаю, из-за объявления переменной в цикле for.

 int factorial(int x) {
      int product = 1;

      for (int i = x; i > 0; i--) {
           product *= i;
      }

      return product;
 }
8
задан stckvrflw 17 November 2009 в 11:20
поделиться

5 ответов

Используйте StringBuilder .

StringBuilder sb = new StringBuilder();
for(int i=0; i< 200; i++){
   sb.append(longString);
}
return sb.ToString();

Когда вы используете + = для строк, вы продолжаете создавать новые строки и находить все большие и большие блоки памяти. Вот почему операция идет так медленно.

45
ответ дан 5 December 2019 в 04:30
поделиться

Используя StringBuilder , как @Kobi ссылается на , вы все равно можете повысить производительность, инициализировав его. Кажется, вы можете заранее определить окончательный размер строки .

StringBuilder sb = new StringBuilder(7000*2000);
for(int i=0; i< 7000; i++){
   sb.append(2000_char_long_string);
}
return sb.ToString();
14
ответ дан 5 December 2019 в 04:30
поделиться

Манипуляции со строкой неизменяемы. Новая строка будет создаваться каждый раз, когда stmt x + = 2000_char_long_string; выполняется. Следовательно, как предлагает Коби, вы должны использовать класс StringBuilder.

Однако в вашем случае вы должны указать емкость в конструкторе StringBuilder.

Это связано с тем, что, если не указано иное, емкость StringBuilder по умолчанию во время создания равна 16.

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

2
ответ дан 5 December 2019 в 04:30
поделиться

Следует использовать класс StringBuilder

1
ответ дан 5 December 2019 в 04:30
поделиться

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

1
ответ дан 5 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: