【发布时间】:2011-11-24 03:59:22
【问题描述】:
我写了以下函数
public void TestSB()
{
string str = "The quick brown fox jumps over the lazy dog.";
StringBuilder sb = new StringBuilder();
int j = 0;
int len = 0;
try
{
for (int i = 0; i < (10000000 * 2); i++)
{
j = i;
len = sb.Length;
sb.Append(str);
}
Console.WriteLine("Success ::" + sb.Length.ToString());
}
catch (Exception ex)
{
Console.WriteLine(
ex.Message + " :: " + j.ToString() + " :: " + len.ToString());
}
}
现在我想,StringBuilder 有能力处理超过 20 亿个字符(准确地说是 2,147,483,647)。
但是当我运行上述函数时,它在达到大约 8 亿的容量时给出了System.OutOfMemoryException。
此外,我在具有相同内存和相似负载量的不同 PC 上看到了截然不同的结果。
谁能提供或解释一下原因?
【问题讨论】:
-
您将能够通过
StringBuilder sb = new StringBuilder(10000000 * 1);更好地接近最高点 使用(n 初始)容量对于大集合总是一个好主意。
标签: c# out-of-memory stringbuilder