我有这个方法,预计会返回一个字符串,但字符串很大,可能是GB。目前这会遇到内存不足异常。
我在想我会写一个文件(随机文件名)然后读取它删除文件并发回回复。尝试MemoryStream
和StreamWriter
也遇到内存不足异常。
不想用容量来初始化StringBuilder
,因为它的大小未知,我认为它需要连续的内存块。
解决这个问题的最佳方法是什么?
public string Result()
{
StringBuilder response = new StringBuilder();
for (int i = 1; i <= Int.Max; i++)
{
response.Append("keep adding some text {0}", i);
response.Append(Environment.NewLine);
}
return response.ToString();
}
答案 0 :(得分:2)
即使您可以解决StringBuilder
上的内存问题,通过调用response.ToString()
生成的字符串也会大于.NET中字符串的最大长度,请参阅:https://stackoverflow.com/a/140749/3997704
所以你必须让你的函数将结果存储在别处,比如在文件中。