StringBuilder内存不足

本文关键字:内存不足 StringBuilder | 更新日期: 2023-09-27 18:27:19

我正试图用以下字符串对我的解析器进行崩溃测试:

var theWholeUTF8 = new StringBuilder();
for (char code = Char.MinValue; code <= Char.MaxValue; code++)
{
        theWholeUTF8.Append(code);
}

但是,测试在构建字符串时会崩溃,并抛出OutOfMemoryException。我错过了什么?

StringBuilder内存不足

问题是code溢出并在成为Char.MaxValue后返回到0for循环不会结束。

尝试

var theWholeUTF8 = new StringBuilder();
for (int code = Char.MinValue; code <= Char.MaxValue; code++)
{
    theWholeUTF8.Append((char)code);
}

为了清楚起见。。。在某一点

code = Char.MaxValue - 1
code++; // code == Char.MaxValue
is code <= Char.MaxValue? Yes
theWholeUTF8.Append((char)code);
code++; // code == 0
is code <= Char.MaxValue? Yes
theWholeUTF8.Append((char)code);
and so on!

一种可能的解决方案是对code使用更大的变量。另一种解决方案是:

for (char code = Char.MinValue; code < Char.MaxValue; code++)
{
    theWholeUTF8.Append(code);
}
theWholeUTF8.Append(Char.MaxValue);

其中我们在CCD_ 6时停止,并且我们手动添加CCD_。

其他解决方案,通过在添加之前移动支票获得:

char code = Char.MinValue;
while (true)
{
    theWholeUTF8.Append(code);
    if (code == Char.MaxValue)
    {
        break;
    }
    code++;
}