Объединение строк является операцией O (N).Строки являются неизменяемыми, поэтому при добавлении в строку новое значение копируется в новую строку, что требует повторения предыдущей строки.Так как вы добавляете значение для каждой итерации, количество, которое нужно читать каждый раз, увеличивается с каждым добавлением, что приводит к производительности O (N ^ 2).Поскольку ваше N равно 1 000 000, это занимает очень и очень много времени, и, вероятно, потребляет всю память, хранящуюся в этих промежуточных одноразовых строках.
Нормальное решение при построении строки с произвольным числомвходы вместо этого использовать StringBuilder.Хотя битовая строка из 1 000 000 символов все еще ... громоздка.Предполагая, что цепочка битов - это то, что вам нужно / нужно, вы можете изменить свой код на что-то вроде следующего и получить гораздо более производительное решение.
public string GetGiantBitString() {
var sb = new StringBuilder();
var rand = new Random();
for(var i = 0; i < 1_000_000; i++) {
sb.Append(rand.Next() % 2);
}
return sb.ToString();
}