List <string> Out of Memory Exception </string>

时间:2013-04-09 06:32:04

标签: c# list out-of-memory

我想填写如下列表:

    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
我想使用该列表,该替换是什么或如何解决该错误?

提前致谢

5 个答案:

答案 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都比字符串更快..

只需在需要时转换为字符串 - 请查看此链接以获取适用于您的方案的最佳方法(转换):

Better way to cast object to int