!好的!
我有一段简单的代码,我不能很好地理解正在发生的事情......
static void Main(string[] args)
{
string cadena = "lore";
for(int i=0; i<1000000; i++)
{
cadena += "lore";
}
Console.WriteLine(cadena);
}
它的作用很容易弄清楚。只需将变量中的单词链接一百万次,然后它应该在控制台上显示它。lore
cadena
我强调应该,因为它没有。这就是我不明白的,为什么它不显示结果,并保持程序运行?我怎样才能让它显示出来?
我试图给它一个旋转......我发现的逻辑是它超出了 a can have 的字符限制string
,但由于没有抛出任何类型的异常,这让我怀疑。
知道为什么会发生这种情况,以及如何解决吗?
我怀疑问题不
string
在于 .net 中允许的最大大小(理论上 2,147,483,647 个字符,最大大小Int32
,尽管这并不完全正确),而是strings
.net 和其他语言的一个属性:它们是不可变的。在循环的每次迭代中,都会在内存中创建一个新字符串,这使得它变得非常慢。
要按照您的要求进行操作,您必须使用
StringBuilder
,它代表一个可变字符串。看这个例子:通过使用
StringBuilder
,您不会string
在每次交互时都创建一个,它会按您的预期工作。