我想填写如下列表:
List<string> list_lines = new List<string>();
for (double num = double.Parse(txtStart.Text); num < 99999999; num++)
{
list_lines.Add(num.ToString());
}
但是这些代码会导致33,554,432
错误并出现错误:
Out Of Memory Exception
我想使用该列表,该替换是什么或如何解决该错误?
提前致谢
答案 0 :(得分:3)
如果您可以使用IEnumerable替换List,则可以使用以下方法
static IEnumerable<string> Gen()
{
for (double num = 0; num < 99999999; num++)
{
yield return num.ToString();
}
}
所以基本上你没有分配内存,进一步处理时你必须记住你不能调用类似Gen()的东西.ToArray()这会产生同样的问题。 如果你需要清单,那就没办法了。
答案 1 :(得分:1)
您可以进行一些内存优化,例如只进行一次解析:
var parsed_number = double.Parse(txtStart.Text);
List<string> list_lines = new List<string>();
for (double num = parsed_number; num < 99999999; ++num)
{
list_lines.Add(num.ToString());
}
这可能有助于内存使用。
答案 2 :(得分:0)
你没有足够的记忆!
循环保留内存的每一步。整个循环需要[99999999 * 99999999/2 * sizeof(double)] B.这真是一个很大的数字
答案 3 :(得分:0)
如果您需要这些数字,请尝试使用此代码:
int startNumber = int.Parse(txtStart.Text);
List<int> list_lines = new List<int>();
for (int i = startNumber; i < 99999999; i++)
{
list_lines.Add(i);
}
这将毫无问题地运行。如果您以后需要将数字作为字符串,只需在检索它们时进行转换。
答案 4 :(得分:0)
我建议John Willemse的答案 - 任何时候int都比字符串更快..
只需在需要时转换为字符串 - 请查看此链接以获取适用于您的方案的最佳方法(转换):