C:
Редактировать: На самом деле C ++, я думаю, из-за объявления переменной в цикле for.
int factorial(int x) {
int product = 1;
for (int i = x; i > 0; i--) {
product *= i;
}
return product;
}
Используйте StringBuilder .
StringBuilder sb = new StringBuilder();
for(int i=0; i< 200; i++){
sb.append(longString);
}
return sb.ToString();
Когда вы используете + =
для строк, вы продолжаете создавать новые строки и находить все большие и большие блоки памяти. Вот почему операция идет так медленно.
Используя StringBuilder
, как @Kobi ссылается на , вы все равно можете повысить производительность, инициализировав его. Кажется, вы можете заранее определить окончательный размер строки
.
StringBuilder sb = new StringBuilder(7000*2000);
for(int i=0; i< 7000; i++){
sb.append(2000_char_long_string);
}
return sb.ToString();
Манипуляции со строкой неизменяемы. Новая строка будет создаваться каждый раз, когда stmt x + = 2000_char_long_string; выполняется. Следовательно, как предлагает Коби, вы должны использовать класс StringBuilder.
Однако в вашем случае вы должны указать емкость в конструкторе StringBuilder.
Это связано с тем, что, если не указано иное, емкость StringBuilder по умолчанию во время создания равна 16.
После того, как эта емкость будет исчерпана, будет создана новая непрерывная область памяти, скопируйте все содержимое StringBuilder в новое расположение. и наведите экземпляр на новое место.
C # Строковый объект является неизменным, каждый раз при изменении содержимого создается новый объект и копируется новое содержимое. Вместо этого используйте StringBuilder, он предназначен для решения проблемы, с которой вы столкнулись